我有一个名为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)
答案 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]]
具有相同的长度时才能正常工作。