【发布时间】:2016-08-02 15:09:12
【问题描述】:
我有一个这样的列表:
# output from a package function
A <- list(a = matrix(1:9,ncol=3),
b = matrix(1:8,ncol=4),
c = 1.5)
B <- list(a = matrix(11:19,ncol=3),
b = matrix(11:18,ncol=4),
c = 2.5)
# list with all outputs (from loaded=lapply(filenames, function(x) get(load(x))) )
superlist <- list(A, B))
我想做的是首先将每个列表项(A,B)的名称添加到所有二阶列表元素中。例如 B 会变成:
B <- list(a = cbind(matrix(11:19,ncol=3),c("B","B","B")),
b = cbind(matrix(11:18,ncol=4),c("B","B")),
c = c(2.5,"B"))
然后,目标是将所有具有相同名称的矩阵、值或数据帧 (a,b,c) 绑定在一起,这样我就可以:
superlist <- list(a = rbind(cbind(matrix(1:9,ncol=3),c("A","A","A")),cbind(matrix(11:19,ncol=3),c("B","B","B"))),
b = rbind(cbind(matrix(1:8,ncol=4),c("A","A")),cbind(matrix(11:18,ncol=4),c("B","B"))),
c = rbind(c(1.5,"A"),c(2.5,"B")))
对于 rbinding,我得到的最好的是这个(来自rbind all dataframes in a list of lists by name):
do.call("rbind",lapply(superlist ,function(x) x[["a"]]))
但是,它只针对一个列表元素(我有超过 20 个)。我知道我可以写一个循环,但是因为我会经常使用这个函数,所以我想知道如何做得更好。
我知道有很多关于此问题的问题,但没有一个问题完全相同(例如,有些问题只有数据框作为列表元素的列表,有时大小相同)。因此,尽管某些问题提供了一些帮助,但没有一个问题真正为我提供了足够的信息来解决我的问题。
- rbind dataframes in a list of lists # 按第二个列表分组,而不是第一个分组
- Convert a list of data frames into one data frame#只有一个列表
- rbinding a list of lists of dataframes based on nested order
- ...
谢谢
【问题讨论】:
-
“我想做的是首先将每个列表项(A,B)的名称添加到所有二阶列表元素中。” ——不要这样做。您正在使用名称中的字符污染数据中的数字,例如,
cbind(matrix(11:19,ncol=3),c("B","B","B"))