逐个单元地在类似大小的表的列表上应用函数

时间:2013-03-13 15:06:17

标签: r list matrix dataframe apply

我们会获得相同大小的 n data.framematrix列表( r c ),我们需要在所有表格的每个单元格上应用一个函数,并将结果作为相同大小的data.framematrix r by c 再次)。

For example:
a <- matrix(0:5, 2, 3)
b <- matrix(5:0, 2, 3)
c <- matrix(1, 2, 3)
l <- list(a, b, c)
foo(l, mean) # should retrun
2 2 2 
2 2 2
# For instance the top-left cell of 3 given matrices are 0, 5, and 1, and the mean is 2
# For all other cells, the mean of the values in 3 matrices will be 2

有很多方法可以完成这项工作,但我正在寻找一个非常快速和简短的解决方案

2 个答案:

答案 0 :(得分:2)

这是使用simplify2array函数

的R基础解决方案
 apply(simplify2array(l),c(1,2),mean)
     [,1] [,2] [,3]
[1,]    2    2    2
[2,]    2    2    2

请注意,simplify2array(l)abind(l,along = 3)

完全相同

答案 1 :(得分:1)

使用 abind 包:

library(abind)
apply(abind(l,along = 3),c(1,2),mean)

当然还有更快的版本:

rowMeans(abind(l,along = 3),dims = 2)