我在R中有一个list对象,它包含更多的列表,每个列表包含三个向量。生成三个矩阵的最快方法是什么?首先是第一个矩阵,第二个矩阵是行,第二个矩阵是行,第三个矩阵是第三个矩阵。例如,考虑到:
metalist <- list(list(c(1,1),c(11,11),c("a","a")),
list(c(2,2),c(22,22),c("b","b")),
list(c(3,3),c(33,33),c("c","c")))我想介绍三个矩阵(或data.frames),第一个矩阵包括:
1 1
2 2
3 3第二部分由
11 11
22 22
33 33第三部分由
a a
b b
c c在现实中,金本位有50,000个列表对象,提取向量元素并逐步组合矩阵的for循环要花费很长时间,所以我会寻找更快的方法。我猜可能有一些聪明的使用unlist(),但我不知道它。
发布于 2016-03-15 21:54:56
以下将创建一个由三个矩阵组成的列表:
my_outcome <- list()
for (i in 1:3)
{
my_outcome[[i]] <- t(as.data.frame(lapply(metalist, `[[`, i)))
}它确实使用了一个循环,但是只使用矩阵的数量,所以在您的情况下,它应该可以工作。
发布于 2016-03-15 23:56:57
do.call(Map,c(f=___,...))模式是一个有用的工具箱中的模式。在空白的"transposes“结构中使用list,使用rbind将生成所需的矩阵:
do.call(Map,c(f=rbind,metalist))
[[1]]
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 3 3
[[2]]
[,1] [,2]
[1,] 11 11
[2,] 22 22
[3,] 33 33
[[3]]
[,1] [,2]
[1,] "a" "a"
[2,] "b" "b"
[3,] "c" "c" 发布于 2016-03-15 23:40:29
如果您想完全忽略for循环,下面的工作也完成了:
lapply(1:3, function(y) {
do.call(rbind,lapply(metalist, function(x) x[[y]]))
})https://stackoverflow.com/questions/36022837
复制相似问题