我使用future
包创建并行循环。有时,表达式会引发错误。在这种情况下,整个过程都会运行(需要很长时间),而且只有在评估期货时,函数才会失败。
相反,当引发错误时,该函数应该失败。特别是如果在过程开始时引发错误。例如,此代码仅在100次迭代后才会失败,但实际上可能在第10次迭代之前失败。
g = function()
{
future::plan(future::multiprocess, workers = 4)
x = vector("list", 100)
for(i in 1:100)
{
x[[i]] = future::future(
{
u = runif(1, 0, 100)
if (u > 80)
stop("Error")
return(u)
})
cat(sprintf("\rProgress: %g%%", i, file = stderr()))
}
return(future::values(x))
}
如何使用future
管理错误处理?
答案 0 :(得分:1)
我相信您需要做的就是设置earlySignal = TRUE
,如下所示:
g = function()
{
future::plan(future::multiprocess, earlySignal = TRUE, workers = 4)
x = vector("list", 100)
for(i in 1:100)
{
x[[i]] = future::future(
{
u = runif(1, 0, 100)
if (u > 80)
stop("Error")
return(u)
})
cat(sprintf("\rProgress: %g%%", i, file = stderr()))
}
return(future::values(x))
}
g()