我需要使用条件停止并行循环,例如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
会返回一个无效列表。
答案 0 :(得分:0)
发生这种情况的原因是因为when(res < 1)
在调用环境中查找,而不是循环内的环境。所以你定义了res <- Inf
,它永远不会少于1。
此外,你的foreach循环总是返回0.1,因为内循环总是停在I = 1000,所以res将是0.1。目前还不清楚你要做什么,或者你什么时候想要循环停止?