我正在运行下面的代码,只得到i = 1的结果 如何获得全部结果的行矩阵 - i = 2且i = 3?
library(doMC)
library(foreach)
number_of_cpus=4
cl<-makeCluster(number_of_cpus)
registerDoMC(cores=4)
split_results2 <-
foreach(i=1:3, .combine=rbind, .inorder=TRUE, mc.cores=4) %dopar% {
Split_factor=as.character(split_factors[1,i])
Data$Split_Factor = as.character(Data$Split_Factor)
Data_new=Data[Data$Split_Factor==Split_factor,]
GetSplit(Data_new,Data_ind,num_vars,num_factors,r_jobs,probs) }
答案 0 :(得分:0)
foreach函数没有名为“mc.cores”的参数,因此它被视为迭代变量,但由于您只为其指定了一个值,因此它将循环限制为一次迭代。只需删除“mc.cores”参数,它应该按照您期望的方式工作。
考虑这个循环:
foreach(i=1:3, j=10) %dopar% {
c(i, j)
}
它被“j”限制,返回一个包含一个元素的列表,而这个循环:
foreach(i=1:3, j=10:100) %dopar% {
c(i, j)
}
受“i”限制,返回包含三个元素的列表。
Foreach并行迭代所有指定的迭代变量,因此循环受具有最少数量值的迭代变量的限制。请注意,在这方面,foreach的工作方式与“mapply”不同,后者使用较少的值来回收迭代变量。
另请注意,没有理由创建群集“cl”。它只会在你的机器上创建一些不会做任何事情的额外进程。