2017-02-17 55 views
12

我發現了一個foreach包中的功能/錯誤,我不明白。也許有人可以解釋我的這種行爲:在foreach包中的列表結構

我創建了一個for循環與foreach包(我與他們一起使用mutlicore計算,但這裏只是在一個sequentiell的例子中,這個錯誤出現在這兩個變種)。該循環運行r次。在每次運行中,返回一個包含c條目的列表。所以我期望有一個包含r條目的列表,並且每個條目都包含c列表。

我的代碼爲以下之一:

library(foreach) 

clusters <- 10 
runs <- 100 

temp <- foreach(r = 1:runs, 
       .combine = 'list', 
       .multicombine = TRUE) %do% { 

       signal_all <- lapply(1:clusters, function(x){ 

       return(1) 

       }) 

       return(signal_all) 
      } ## end do 

有了這個代碼,所有的作品如預期,見下圖:

enter image description here

但增加runs <- 101時,輸出temp是此:

enter image description here

預期的列表結構被破壞。但是當註釋掉.combine = 'list'這一行時,所有的工作都如預期的那樣。

library(foreach) 

clusters <- 10 
runs <- 100 

temp <- foreach(r = 1:runs, 
       .multicombine = TRUE) %do% { 

       signal_all <- lapply(1:clusters, function(x){ 

       return(1) 

       }) 

       return(signal_all) 
      } ## end do 

enter image description here

有人可以解釋這種現象? 感謝您的幫助!

回答

4

同時我找到了解決方案。

foreach函數知道一些comine函數(例如ccbind)需要很多參數,並且會使用最多100個參數(默認情況下)來調用它們以提高性能。通過參數.maxcombine,您可以手動設置它們。

library(foreach) 

clusters <- 10 
runs <- 101 

temp <- foreach(r = 1:runs, 
       .combine = 'list', 
       .maxcombine = runs, 
       .multicombine = T) %do% { 

       signal_all <- lapply(1:clusters, function(x){ 

       return(1) 

       }) 

       return(signal_all) 
      } ## end do