本文介绍了R中的foreach()中的try()问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to use the try() function to deal with errors that are occurring in my parallelised for loop:

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的循环"以忽略错误消息(或者至少更优雅地处理它)?

How can I get the foreach "loop" to ignore the error message (or at least deal with it a little more elegantly)?

推荐答案

您可以使用tryCatch并适当地处理错误.这里的错误将被忽略(返回NULL)

You can use tryCatch and deal with the error appropriately. Here the error is ignored (returning NULL)

results <- foreach (i = 1:2) %dopar% {
    res <- tryCatch({
        myfun(i)
    }, error=function(e) NULL)
}

,或者仅使用内置的.errorhandling='remove',而不使用try应该已经消除了错误.

or just using the builtin .errorhandling='remove' as you have, without the try should remove the errors already.

这篇关于R中的foreach()中的try()问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 15:39