Problems with try() inside foreach() in R Problems with try() inside foreach() in R r r

Problems with try() inside foreach() in R


If you want to use the "remove" or "pass" error handling in foreach, you don't need to catch the error yourself. Here are the results when setting the error handling to "remove":

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

Here are the results when using "pass":

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

By using try, the error is caught and then translated to a "try-error" object by the try function, hiding the error from foreach until the the clusterApplyLB function (which is used to implement the doParallel backend) notices the "try-error" object in the list of results and throws an error in the master process. I would call that a bug in doParallel.

Note that the solution given by @LegalizeIt works because it returns a NULL rather than a "try-error" object, thus avoiding the bug in doParallel.


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)}

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