2
我想使用doParallel
包對R中的大數據幀執行一些並行處理。讓我們調用數據框mydata
。我想遍歷按行數據幀,所以像R:使用doParallel將若干行並行處理在一起
foreach(x=iter(mydata, by='row')) %dopar%{
... do stuff ...
}
但是,那不是很正確,因爲在每一個循環,我需要有機會獲得幾行。假設變量idx
包含哪些行需要一起處理的信息。比方說idx
是一個矩陣,看起來像
1 2 3
10 12 14
4 7 9
...
每一行表示mydata
需要一起處理的行。我怎樣才能使用doParallel
包來做到這一點?
編輯:我看到我可以發送「塊」data.frame使用iblkcol
有沒有辦法發送我選擇的非連續塊?
編輯:我結束了使用自定義iteraor:基於
apply(idx,1,function(idx) list(mydata[idx,]))
然後
> data <- data.frame(A=sample(letters,10),B=rnorm(10))
> data
A B
1 z 0.5105797
2 h 1.2559502
3 a 0.9697254
4 n -1.4189076
5 e -0.5800640
6 b 0.2907486
7 q -2.4414012
8 d 1.8146928
9 v 0.2510003
10 x -0.2011185
> idx <- list(c(1,2),c(4,5),c(3,6,7),c(8,9,10))
>
> library(iterators)
>
> ialn <- function(x, idx){
+ it <- iter(idx)
+ nextEl <- function(){
+ n <- nextElem(it)
+ x[n,]
+ }
+ obj <- list(nextElem=nextEl)
+ class(obj)<- c('ialn','abstractiter','iter')
+ obj
+ }
>
>
> it <- ialn(data,idx)
> nextElem(it)
A B
1 z 0.5105797
2 h 1.2559502
> nextElem(it)
A B
4 n -1.418908
5 e -0.580064
謝謝!使用自定義迭代器,我能夠得到我想要的。 – bdeonovic 2014-11-23 23:49:35