我正在尝试实现R并行循环迭代,但不确定如何对其进行条件处理,以便在满足特定条件的情况下,仅需要将结果返回(行绑定附加)到主结果数据集即可。意思是,在某些情况下,我不希望特定的迭代步骤返回任何内容。下面的伪示例:
library(foreach)
library(doParallel)
registerDoParallel(makeCluster(detectCores() - 1))
final.result <- foreach(i = 1:100, .combine=cbind) %dopar% {
getResultDS = functionXYZ()
...
...
...
# append function result to final.result only if getResultDS[1] > 0
if (getResultDS[1,] == 0) {
getResultDS
}
}
...
...
...
在这里感谢任何人的输入,谢谢!
答案 0 :(得分:0)
可以通过定义忽略NA值的.combine
函数来实现所描述的行为。
cbind_ignoreNA <- function(...){
ll <- list(...)
ll <- ll[unlist(lapply(ll, function(x) !(length(x)==1 && is.na(x))))]
do.call("cbind", ll)
}
如果迭代结果不应该出现在NA
的输出中,则可以返回foreach()
(长度为1)。在以下示例中,迭代i=2
的结果将被忽略:
library(foreach)
library(doParallel); registerDoParallel(2)
test <- foreach(i=1:4, .combine=cbind_ignoreNA) %dopar% {
if(i==2)
r <- NA
else
r <- i:(i+3)
r
}
test
[,1] [,2] [,3]
[1,] 1 3 4
[2,] 2 4 5
[3,] 3 5 6
[4,] 4 6 7