R:对1维的2D列表求和

时间:2014-04-01 12:09:32

标签: r list

我有一个名为mylist的二维列表。

我可以像这样访问尺寸:

mylist[[a]][[b]]
其中范围从1到8,b范围从1到4.所有8 * 4 = 32个条目是相同维度的矩阵。

我想在一个维度上总结所有列表。目前我使用:

mylist[[1]][[1]] + mylist[[2]][[1]] + mylist[[3]][[1]] + ... + mylist[[8]][[1]]
mylist[[1]][[2]] + mylist[[2]][[2]] + mylist[[3]][[2]] + ... + mylist[[8]][[2]] mylist[[1]][[3]] + mylist[[2]][[3]] + mylist[[3]][[3]] + ... + mylist[[8]][[3]] mylist[[1]][[4]] + mylist[[2]][[4]] + mylist[[3]][[4]] + ... + mylist[[8]][[4]]

有没有办法在一行代码中执行此操作?这对我来说很重要,因为长度变得可变,不再局限于4和8。我想我需要这样的东西:

mylist_oneDimensional <- sum_list(mylist, dimension=1)

1 个答案:

答案 0 :(得分:1)

根据你所描述的sum_list,可以这样做

sum_list <- function(mylist, dimension=1){
  Reduce('+',lapply(1:length(mylist), function(i) mylist[[i]][[dimension]]))
}

对于dimension = 1,调用sum_list(mylist,1)将对应于

mylist[[1]][[1]] + mylist[[2]][[1]] + mylist[[3]][[1]] + ... + mylist[[8]][[1]]

和sum_list(mylist,2)到

mylist[[1]][[2]] + mylist[[2]][[2]] + mylist[[3]][[2]] + ... + mylist[[8]][[2]]

依赖于尺寸值。

然后获取所有结果总和的列表,再次使用lapply。

lapply(1:length(mylist[[1]]), function (i) sum_list(mylist, i))

仅当mylist[[1]], mylist[[2]], ...., mylist[[n]]具有相同的长度时才能正常工作。