2015-10-21 171 views
1

我有一個二維矩陣列表,我想計算一些統計數據,例如計算平均值。我可以將列表轉換爲數組,並使用應用,如:如何計算2D矩陣列表的平均值?

dat1<-list(a = matrix(seq(1,4),2,2), b= matrix(seq(5,8),2,2), c= matrix(seq(9,12),2,2)) 

# convert to array 
obs <-array(unlist(dat1), dim = c(2, 2, 3)) 
meanObs <- apply(obs, c(1,2), mean, na.rm = TRUE) 

反正有沒有列表轉換爲數組執行此!?直接從列表中計算平均值。 非常感謝!

+0

爲什麼你想避免陣列?列表可以包含混合類型的對象,因此通常函數通常不會將列表的元素組合在一起進行分析。例如,您可以在列表中添加不同維度的數組,這會讓事情變得醜陋。通常你需要告訴R如何正確組合數據。 – MrFlick

+0

我只是想避免通過轉換到數組,以減少編碼。但如果沒有別的辦法,那麼我會去爭取。 – newbie

+0

@ jilber在重複問題上的答案,'apply(simplify2array(mylist),c(1,2),mean)'可能是你想要的(並且會推廣到任何彙總統計) –

回答

3

因爲它是你想要的意思,我覺得你可以做

Reduce("+",dat1)/length(dat1) 

Reduce()採取矩陣的總和,逐個元素,成對出現。然後,你就必須由N.

來劃分這可以爲其他統計工作(如Reduce(pmax,dat1)應該給你的elementwise最大值),但如果你試圖計算一些其他的彙總統計如中位數將更難。 ..在這種情況下,我不認爲你可以避免循環(隱式或顯式)在矩陣元素上。

+0

非常感謝,至少對於一些簡單的統計數據來說這非常好。不幸的是,我有一堆他們計算像中位數和分位數,所以也許我會堅持轉換爲數組。 – newbie