矢量化&并行化列表的分类

时间:2016-03-11 17:08:09

标签: r list lapply rparallel

这是一些生成data.frame列表的代码,然后将原始列表转换为新列表,每个列表元素列出每个数据帧的行。

EG。
  - l1长度为10,每个元素为data.frame,共1000行。
  - l2是一个长度为1000(nrow(l1[[k]]))的列表,每个元素都是长度为10 list的{​​{1}},其中包含{{1}元素的行向量}}

length(l1)

修改为了阐明l1l1 <- vector("list", length= 10) set.seed(65L) for (i in 1:10) { l1[[i]] <- data.frame(matrix(rnorm(10000),ncol=10)) } l2 <- vector(mode="list", length= nrow(l1[[1]])) for (i in 1:nrow(l1[[1]])) { l2[[i]] <- lapply(l1, function(l) return(unlist(l[i,]))) } 的关系,这里是与语言无关的代码。

l1

如何通过向量化或并行化加快l2的创建速度?我遇到的问题是for (j in 1:length(l1) { for (i in 1:nrow(l1[[1]]) { # where nrow(l1[[1]]) == nrow(l1[[k]]) k= 2,...,10 l2[[i]][[j]] <- l1[[j]][i,] } } 拆分列表;但是,我不想拆分列表l2,我想要做的是拆分parallel::parLapplyLB的每个元素中的行。中间解决方案将使用一些l1函数来替换for循环,从而对我当前的方法进行矢量化。显然,这也可以扩展到并行解决方案。

如果我在可接受的解决方案之前自行解决这个问题,我会在这里发布我的答案。

1 个答案:

答案 0 :(得分:1)

我会完全破坏结构并通过Color List: Blue Green Yellow Cyan Red 重建第二个列表。这种方法比原始方法需要更多的内存,但至少对于给定的示例,它的速度要快10倍:

split