2014-04-01 63 views
2

我有一個叫做mylist的二維列表。R:總結一維的2D列表

我可以訪問像這樣的尺寸:

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

根據你所描述的sum_list,它可以像這樣

sum_list <- function(mylist, dimension=1){ 
    Reduce('+',lapply(1:length(mylist), function(i) mylist[[i]][[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]]具有相同的長度,這將只能正常工作。

+0

非常感謝你romantsegelskyi。那正是我正在尋找的。我想知道爲什麼自從Reduce預測VECTOR以來,這一點起作用。但是lapply的輸出是LIST。 –

+0

@BerndMeyer技術上列出的是矢量。更多信息在這個問題 - http://stackoverflow.com/questions/8594814/what-are-the-differences-between-r-vector-and-r-list-data-types。 另外,如果答案足夠好,請接受它:) –