Así que quieren aplicar una función a través de una matriz en R. Esto funciona muy intuitiva para funciones simples:R: La función de la aplicación sobre la matriz y manteniendo dimensiones de la matriz
> (function(x)x*x)(matrix(1:10, nrow=2))
[,1] [,2] [,3] [,4] [,5]
[1,] 1 9 25 49 81
[2,] 4 16 36 64 100
... pero está claro que no lo hacen entender todo de su funcionamiento:
> m = (matrix(1:10, nrow=2))
> (function(x) if (x %% 3 == 0) { return(NA) } else { return(x+1) })(m)
[,1] [,2] [,3] [,4] [,5]
[1,] 2 4 6 8 10
[2,] 3 5 7 9 11
Warning message:
In if (x == 3) { :
the condition has length > 1 and only the first element will be used
que leer sobre esto y se enteraron de Vectorize y sapply, que ambos parecían grandes y al igual que lo que quería, excepto que ambos convertir mi matriz en una lista:
> y = (function(x) if (x %% 3 == 0) { return(NA) } else { return(x+1) })
> sapply(m, y)
[1] 2 3 NA 5 6 NA 8 9 NA 11
> Vectorize(y)(m)
[1] 2 3 NA 5 6 NA 8 9 NA 11
... mientras que me gustaría mantenerlo en una matriz con sus dimensiones actuales. ¿Cómo podría hacer esto? ¡Gracias!
También puedes ver este post útil en las diferentes versiones de aplicar: http://nsaunders.wordpress.com/2010/08/20/a-brief-introduction-to-apply-in-r/ – patrickmdnet