这是一些生成data.frame
列表的代码,然后将原始列表转换为新列表,每个列表元素列出每个数据帧的行。
EG。
- l1
长度为10,每个元素为data.frame
,共1000行。
- l2
是一个长度为1000(nrow(l1[[k]])
)的列表,每个元素都是长度为10 list
的{{1}},其中包含{{1}元素的行向量}}
length(l1)
修改为了阐明l1
与l1 <- 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循环,从而对我当前的方法进行矢量化。显然,这也可以扩展到并行解决方案。
如果我在可接受的解决方案之前自行解决这个问题,我会在这里发布我的答案。
答案 0 :(得分:1)
我会完全破坏结构并通过Color List:
Blue
Green
Yellow
Cyan
Red
重建第二个列表。这种方法比原始方法需要更多的内存,但至少对于给定的示例,它的速度要快10倍:
split