R:使用doParallel并行处理多行

时间:2014-11-22 20:16:21

标签: r parallel-processing dataframe

我想使用doParallel包对R中的大数据帧进行一些并行处理。让我们调用数据框mydata。我想按行迭代数据框,所以像

foreach(x=iter(mydata, by='row')) %dopar%{
    ... do stuff ...
}

但是,这不太正确,因为在每个循环中我需要访问多行。让我们说变量idx包含需要一起处理哪些行的信息。让我们说idx是一个看起来像

的矩阵
1  2  3
10 12 14
4  7  9
...

其中每一行表示需要一起处理的mydata行。如何使用doParallel包进行此操作?

编辑:我看到我可以使用iblkcol发送data.frame的“块”有没有办法发送我选择的非连续块?

编辑:我最终使用了自定义迭代器:

> 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

1 个答案:

答案 0 :(得分:1)

或许将mydata拆分为基于

的列表
apply(idx,1,function(idx) list(mydata[idx,]) )

然后通过foreach发送该列表?

根据行索引获取数据的那个或custom iterator