2013-03-13 35 views
0

細胞,我們給出的ñdata.frame或相同尺寸的matrix列表([R通過Ç),我們需要通過應用功能所有表格的每個單元格並且具有相同大小的data.framematrixr 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 

有許多方法來完成這項工作,但我要尋找一個非常快速和簡短的解決方案

回答

1

使用abind包:

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

當然還有更快版本:

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

+1 rowMeans的解決方案,這是reallllly更快大型陣列 – Ali 2013-03-13 16:02:23

2

下面是使用01的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)

+0

+1使用了原函數,但是'simplify2array()'似乎太對於非常大的數組,比'abind()'慢得多。 – Ali 2013-03-13 16:11:17