0

我正在运行下面的代码,只得到 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)  } 
4

1 回答 1

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”。它只会在您的机器上创建一些不会做任何事情的额外进程。

于 2014-02-27T01:50:49.277 回答