gpt4 book ai didi

r - 一项工作中的错误会用 mclapply 感染其他工作

转载 作者:行者123 更新时间:2023-12-04 22:47:32 26 4
gpt4 key购买 nike

mclapply(X, FUN) X 的某些值遇到错误,错误会传播到 X 的一些(但不是全部)其他值。 :

require(parallel)
test <- function(x) if(x == 3) stop() else x
mclapply(1:3, test, mc.cores = 2)

#[[1]]
#[1] "Error in FUN(c(1L, 3L)[[2L]], ...[cut]
#
#[[2]]
#[1] 2
#
#[[3]]
#[1] "Error in FUN(c(1L, 3L)[[2L]], ... [cut]

#Warning message:
#In mclapply(1:3, test, mc.cores = 2) :
# scheduled core 1 encountered error in user code, all values of the job will be affected

我怎样才能阻止这种情况发生?

最佳答案

诀窍是设置 mc.preschedule = FALSE

mclapply(1:3, test, mc.cores = 2, mc.preschedule = FALSE)
#[[1]]
#[1] 1

#[[2]]
#[1] 2

#[[3]]
#[1] "Error in FUN(X[[nexti]], ...[cut]
#Warning message:
#In mclapply(1:3, test, mc.cores = 2, mc.preschedule = FALSE) :
# 1 function calls resulted in an error

这是有效的,因为默认情况下 mclapply似乎将 X 分成 mc.cores分组并应用 FUN 的矢量化版本到每个组。因此,如果组中的任何成员产生错误,该组中的所有值都将产生相同的错误(但其他组中的值不受影响)。

设置 mc.preschedule = FALSE具有不利影响,并且可能无法重现伪随机数序列,其中同一个作业始终接收序列中的相同数字,请参阅 ?mcparallel在标题随机数下。

关于r - 一项工作中的错误会用 mclapply 感染其他工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18330274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com