2015-08-22 62 views
0

我有這個問題使用R和foreach包進行並行處理。R中的foreach():返回兩個項目,分別刪除所有第一項和所有第二項

我有一個數據集每小時一年。僅考慮一個數據集,以並行方式運行我使用:

day = foreach (h = 1:24, .combine=rbind) %dopar%  { 
    ... 
    singlematrix   # return a single matrix 
    } 
    24matrices <- day 
    # thanks to rbind, all single matrices are piled together 

每個週期返回一個矩陣,並.combine=rbind使得這樣我獲得更大的矩陣,其是堆積在24點單矩陣。

如果不是在每h返回一個矩陣,我想實現這樣的:

day = foreach (h = 1:24, .combine=rbind) %dopar%  { 
    ... 
    list("row"=singlerow, "matrix"=singlematrix)  # return both 
    } 
    24rows <- day[[1]]    # singlerows piled up 
    24matrices <- day[[2]]   # singlematrices piled up 

我怎麼可以堆的所有24個singlerows在一起,所有24個singlematrices在一起,沒有混合行和矩陣?

我試圖插入.multicombine=TRUE,返回list("row"=item1, "matrix"=item2),但行和矩陣混合在一起。不幸的是,我不喜歡lapply,這可能是去這裏的路。 非常感謝!

回答

1

我會猜測,因爲我沒有你的一天到一天的矩陣的實際結構,但也許這會引導你往好的方向:

set.seed(42) 
library(foreach) 
day <- foreach(h = 1:24) %dopar% { 
    ## ... 
    mtx1 <- matrix(sample(6), nr=2) 
    mtx2 <- matrix(sample(8), nr=2) 
    list(mtx1, mtx2) 
} 

length(day) 
## [1] 24 
str(day[[1]]) 
## List of 2 
## $ : int [1:2, 1:3] 6 5 2 3 4 1 
## $ : int [1:2, 1:4] 6 1 4 8 2 3 5 7 

ret1 <- do.call('rbind', lapply(day, `[[` , 1)) 
ret2 <- do.call('rbind', lapply(day, `[[` , 2)) 

str(ret1) 
## int [1:48, 1:3] 6 5 3 5 3 5 1 5 5 1 ... 
str(ret2) 
## int [1:48, 1:4] 6 1 8 1 1 6 8 5 7 4 ... 
相關問題