2014-02-26 39 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」。它只會在你的機器上創建一些額外的進程,它不會做任何事情。

相關問題