【发布时间】:2018-02-05 18:34:13
【问题描述】:
我想在 R 中使用“foreach”循环(包 foreach + doParallel),但在我的工作中我发现循环返回一些 NA,而经典的“for”循环返回我想要的值:
library(foreach)
library(doParallel)
ncore=as.numeric(Sys.getenv('NUMBER_OF_PROCESSORS'))-1
registerDoParallel(cores=ncore)
B=2
a = vector()
b = vector()
foreach(i = 1:B, .packages = "ez",.multicombine = T,.inorder = T, .combine = 'c')%dopar%{
a[i] = i + 1
return(a)
}
for(i in 1:B){
b[i] = i + 1
b
}
如你所见,如果你尝试一下,对象“a”返回一个带有 2、NA 和 3 的向量,而对象“b”返回 2 和 3(这就是我想要的)。
我实际上不明白为什么我的结果中有一个“NA”...
【问题讨论】:
-
foreach 循环的重新运行是针对
i = 1, a = c(2)但对于i = 2它是a = c(NA, 3),因为向量在循环之前被初始化并且对于每个单循环都是空的。在 for 循环中,第二次调用它时不再为空。因此在.combine它被添加到c(2, NA, 3)。 -
感谢您的快速回答!帮助我了解它是如何工作的!
标签: r foreach na doparallel