2014-02-26 82 views
0

我正在运行下面的代码并仅获得i = 1的结果。
我如何获得行矩阵全部结果 - 我= 2和我= 3?为什么使用%dopar%的foreach循环不会产生所有结果

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

在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) 
} 

由 “我”,返回的限制列表包含三个元素。

Foreach并行迭代所有指定的迭代变量,因此循环受到迭代变量限制,其值最少。请注意,在这方面,foreach与“mapply”的工作方式不同,后者使用较少的值来循环迭代变量。

另请注意,没有理由创建群集“cl”。它只会在你的机器上创建一些额外的进程,它不会做任何事情。

相关问题