繁体   English   中英

为什么使用%dopar%的foreach循环无法产生所有结果

[英]Why the foreach loop using %dopar% don't produce all the results

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

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”。 它将在您的计算机上创建一些不会执行任何操作的额外进程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM