组合来自多个列表的深层嵌套向量

时间:2014-10-01 12:38:27

标签: r list data-structures

我希望将相当长的列表的所有元素中的等效深度嵌套列组合在一起。我想做什么,虽然在R中不可能,但是:

combined.columns <- my.list[[1:length(my.list)]]$my.matrix[,"my.column"]

我唯一能想到的是手动输入cbind()中的所有元素,如下所示:

combined.columns <- cbind(my.list[[1]]$my.matrix[,"my.column"], my.list[[2]]$my.matrix[,"my.column"], . . . )

This answer非常接近我需要的东西,但我无法弄清楚如何使其适用于额外的嵌套级别。

但是,必须有更优雅的方式来做到这一点。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

假设您希望提取的所有矩阵具有相同的列名,您可以使用sapply

set.seed(123)
my.list <- vector("list")
my.list[[1]] <- list(my.matrix  = data.frame(A=rnorm(10,sd=0.3), B=rnorm(10,sd=0.3)))
my.list[[2]] <- list(my.matrix  = data.frame(C=rnorm(10,sd=0.3), B=rnorm(10,sd=0.3)))
my.list[[3]] <- list(my.matrix  = data.frame(D=rnorm(10,sd=0.3), B=rnorm(10,sd=0.3)))

sapply(my.list, FUN = function(x) x$my.matrix[,"B"])

答案 1 :(得分:1)

免费数据:

myList <- list(list(myMat = matrix(1:10, 2, dimnames=list(NULL, letters[1:5])),
                    myVec = 1:10),
               list(myMat = matrix(10:1, 2, dimnames=list(NULL, letters[1:5])),
                    myVec = 10:1))

我们可以通过几种不同的方式获得a的{​​{1}}列。这是使用myMat的人。

with

对于更递归的类型问题,这个sapply(myList, with, myMat[,"a"]) # [,1] [,2] # [1,] 1 10 # [2,] 2 9 可能更好。它也有效,可能比mapply快。

sapply