2013-03-13 2 views
0

Мы дали список пdata.frame или matrix того же размера (г по с), необходимо применить функцию над каждая ячейка всех таблиц и имеющая результат как data.frame или matrix того же размера (r от 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

2

Это базовое решение 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

Смежные вопросы