2015-10-21 136 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