我有一个列表,看起来像这样:x[[state]][[year]].这个元素的每个元素都是一个数据框,单独访问它们不是问题.
但是,我想在多个列表中绑定数据帧.更具体地说,我想拥有与我多年一样多的数据帧输出,即每年所有状态数据帧的rbind.换句话说,我想将我所有的状态数据逐年合并到不同的数据框中.
我知道我可以将单个列表组合到一个数据框中do.call("rbind",list).但是我不知道如何在列表列表中这样做.
假设我有两个列表,列表的相应元素是相同的形状:
e1=list(1,c(1,2,3),matrix(1:12,3,4))
e2=list(1,c(1,2,3),matrix(1:12,3,4))
Run Code Online (Sandbox Code Playgroud)
我想逐个元素地添加这两个列表.这是我的解决方案,适用于任何长度的列表和任何形状的元素,只要它们匹配并且是可添加的:
> esum
function(e1,e2){
e = list()
for(i in 1:length(e1)){
e[[i]]=e1[[i]]+e2[[i]]
}
e
}
> esum(e1,e2)
Run Code Online (Sandbox Code Playgroud)
但它看起来很丑陋,而且可能是一种可以在单行中完成的事情.
这是问题的第一阶段,实际上是要添加许多这些列表的完整列表,但是一旦定义了esum,它只是Reduce:
> ee = list(e1,e2,e1,e1,e2)
> Reduce(esum,ee)[[3]] # lets just check [[3]] for now
[,1] [,2] [,3] [,4]
[1,] 5 20 35 50
[2,] 10 25 40 55
[3,] 15 30 45 60
Run Code Online (Sandbox Code Playgroud)
那么,任何人都有这样的单线程?
是的我知道单行并不总是最好的东西.