gpt4 book ai didi

r - R 中 foreach() 内的 try() 问题

转载 作者:行者123 更新时间:2023-12-01 22:23:43 27 4
gpt4 key购买 nike

我正在尝试使用 try() 函数来处理并行 for 循环中发生的错误:

results <- foreach (i = 1:2, .errorhandling = 'remove') %dopar% {
res <- try(myfun(i), TRUE)
}

myfun <- function(i){
if (i==1) return(rnorm(1))
else stop('error')
}

我收到以下错误消息

Error in checkForRemoteErrors(val) : 
one node produced an error: Error in myfun(i) : error

如何让 foreach“循环”忽略错误消息(或者至少更优雅地处理它)?

最佳答案

如果您想在foreach中使用“remove”或“pass”错误处理,则无需自己捕获错误。以下是将错误处理设置为“删除”时的结果:

> foreach (i = 1:2, .errorhandling = 'remove') %dopar% {
+ myfun(i)
+ }
[[1]]
[1] 1.314854

以下是使用“pass”时的结果:

> foreach (i = 1:2, .errorhandling = 'pass') %dopar% {
+ myfun(i)
+ }
[[1]]
[1] 0.7247509

[[2]]
<simpleError in myfun(i): error>

通过使用try,错误被捕获,然后由try函数转换为“try-error”对象,从而对foreach<隐藏错误 直到clusterApplyLB 函数(用于实现doParallel 后端)注意到结果列表中的“try-error”对象并抛出错误主进程。我将其称为 doParallel 中的错误。

请注意,@LegalizeIt 给出的解决方案有效,因为它返回一个 NULL 而不是“try-error”对象,从而避免了 doParallel 中的错误。

关于r - R 中 foreach() 内的 try() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31138257/

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