![](/img/trans.png)
[英]Why isn't this foreach/dopar function using all the cores I asked for?
[英]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.