从列表中的列表聚合数据

时间:2015-03-18 13:27:50

标签: r

下面我将展示我的可重复示例。现在,当我在许多不同的来源(比如50件事)上做一堆回归类型工作时,我将每个列表汇总在一个列表中,然后将这些列表组合在一起以便于存储。每个列表的结构都相同,它只包含不同的数据。聚合特定部分的最佳方法是什么?在这个例子中,最快的方法是组合ds1,ds2,ds3和amp; ds4,嵌入到不同的列表中?

set.seed(50)
df1 <- data.frame(x=runif(10),y=runif(10))
set.seed(50)
df2 <- data.frame(x=runif(10),y=runif(10))
set.seed(50)
df3 <- data.frame(x=runif(10),y=runif(10))
set.seed(50)
df4 <- data.frame(x=runif(10),y=runif(10))


rs1 <- rep(0.05,5)
rs2 <- rep(0.03,5)
rs3 <- rep(0.06,5)
rs4 <- rep(0.09,5)

ds1 <- rep(0.04,5)
ds2 <- rep(0.04,5)
ds3 <- rep(0.04,5)
ds4 <- rep(0.04,5)

rsdsList1 <- list(rs1,ds1)
rsdsList2 <- list(rs2,ds2)
rsdsList3 <- list(rs3,ds3)
rsdsList4 <- list(rs4,ds4)


mg1 <- list(df1,rsdsList1)
mg2 <- list(df2,rsdsList2)
mg3 <- list(df3,rsdsList3)
mg4 <- list(df4,rsdsList4)

1 个答案:

答案 0 :(得分:2)

您可以使用以下命令将多个列表的第n个元素收集到单个列表中:

lapply(list(mg1, mg2, mg3, mg4), '[[', n)

因此,在您的情况下,lapply(list(mg1, mg2, mg3, mg4), '[[', 1)将创建您所追踪的列表。

您可以使用lapply命名要迭代的列表元素,以将这些名称转移到输出列表的元素,例如

lapply(list(mg1=mg1, mg2=mg2, mg3=mg3, mg4=mg4), '[[', 1)

或将lapply包裹在setNames中:

setNames(lapply(list(mg1, mg2, mg3, mg4), '[[', 1), paste0('mg', 1:4))