首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:使用doParallel并行处理几行

R:使用doParallel并行处理几行
EN

Stack Overflow用户
提问于 2014-11-22 20:16:20
回答 1查看 502关注 0票数 2

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

代码语言:javascript
复制
foreach(x=iter(mydata, by='row')) %dopar%{
    ... do stuff ...
}

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

代码语言:javascript
复制
1  2  3
10 12 14
4  7  9
...

其中,每行指示需要一起处理的mydata行。我如何使用doParallel包来完成这个任务?

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

编辑:我最后使用了一个自定义迭代器:

代码语言:javascript
复制
> 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-22 21:35:46

也许将mydata拆分成一个基于

代码语言:javascript
复制
apply(idx,1,function(idx) list(mydata[idx,]) )

然后把那份名单传过去?

或者是基于行索引获取数据的自定义迭代器

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27082043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档