KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am using the R package foreach() with %dopar% to do long (~days) calculations in parallel. I would like the ability to stop the entire set of calculations in the event that one of them produces an error. However, I have not found a way to achieve this, and from the documentation and various forums I have found no indication that this is possible. In particular, break() does not work and stop() only stops the current calculation, not the whole foreach loop. Note that I cannot use a simple for loop, because ultimately I want to parallelize this using the doRNG package. Here is a simplified, reproducible version of what I am attempting (shown here in serial with %do% , but I have the same problem when using doRNG and %dopar% ). Note that in reality I want to run all of the elements of this loop (here 10) in parallel. library(foreach) myfunc <- function() { x <- foreach(k = 1:10, .combine="cbind", .errorhandling="stop") %do% { cat("Element ", k, "\n") Sys.sleep(0.5) # just to show that stop does not cause exit from foreach if(is.element(k, 2:6)) { cat("Should stop\n") stop("Has stopped") } k } return(x) } x <- myfunc() # stop() halts the processing of k=2:6, but it does not stop the foreach loop itself. # x is not returned. The execution produces the error message # Error in { : task 2 failed - "Has stopped" What I would like to achieve is that the entire foreach loop can be exited immediately upon some condition (here, when the stop() is encountered). I have found no way to achieve this with foreach . It seems that I would need a way to send a message to all the other processes to make them stop too. If not possible with foreach , does anyone know of alternatives? I have also tried to achieve this with paralle
Tags (comma-separated)
Save Edits
Cancel