在foreach中停止标准

时间:2017-07-01 02:31:03

标签: r foreach parallel-processing parallel-foreach

我需要使用条件停止并行循环,例如res < 1时。 MWE由下面的代码给出

library(foreach)
library(doParallel)    
I <- 1000
L <- 1000
res <- Inf    
cores <- detectCores()
cluster <- makeCluster(cores)
registerDoParallel(cluster)
out <- foreach(l = 1:I,.packages = "cec2013") %dopar% {
    for(i in 1:I){
       res <- 100/i
     }
   out <- res
   out
}
out

我试探性的解决方案由

提供
out <- foreach(l = 1:I,.packages = "cec2013")%:%when(res < 1)  %dopar% {
    for(i in 1:I){
       res <- 100/i
     }
   out <- res
   out
}
out

但是out会返回一个无效列表。

1 个答案:

答案 0 :(得分:0)

发生这种情况的原因是因为when(res < 1)在调用环境中查找,而不是循环内的环境。所以你定义了res <- Inf,它永远不会少于1。

此外,你的foreach循环总是返回0.1,因为内循环总是停在I = 1000,所以res将是0.1。目前还不清楚你要做什么,或者你什么时候想要循环停止?