这个问题有一个简单而好的答案吗?
我有一个给定的矩阵列表"l"(具有相同的ncol&nrow).
l<-lapply(1:10,function(x){
matrix(runif(100),ncol=10)
})
Run Code Online (Sandbox Code Playgroud)
我想要每个细胞的意思.我可以用for循环来做到这一点,但应该有更好的解决方案!
有了两个矩阵,我可以用(m1 + m2)/ 2来做.但+只接受两个参数,所以我不能这样做:
do.call(.Primitive("+"),l) / length(l)
Run Code Online (Sandbox Code Playgroud)
我期待着一些不错的答案:)
提前致谢
以下是一些替代方案:
1)减少
Reduce("+", l) / length(l)
Run Code Online (Sandbox Code Playgroud)
2)simlify2array/apply比(1)长一点; 但是,它确实具有易于扩展到以下功能的优点mean:
apply(simplify2array(l), 1:2, mean)
Run Code Online (Sandbox Code Playgroud)
3)tapply 不像(1)那么简单,但是(2)它扩展到除mean以下之外的函数:
array(tapply(unlist(l), sequence(lengths(l)), mean), dim(l[[1]]))
Run Code Online (Sandbox Code Playgroud)
4)rowMeans
array(rowMeans(matrix(unlist(l),, length(l))), dim(l[[1]]))
Run Code Online (Sandbox Code Playgroud)