2011-06-29 24 views
12

Dada una matriz:R - posición de retorno del elemento en la matriz?

 [,1] [,2] 
[1,] 0 0.0 
[2,] -1 0.8 

¿Cuál es la forma más rápida en I para iterar sobre la matriz y devolver la posición de todas las entradas no cero como un índice?

+6

Su pregunta debería ser "que es la forma más rápida?" Entonces también se contestaría a sí mismo;) – hadley

+1

Me he estado riendo de esta broma de "cuál es la manera más rápida" durante dos días. Lo hice en una publicación de blog Me gusta mucho. –

Respuesta

27

Aquí es uno de los enfoques

mat = matrix(rnorm(9), 3, 3) 
which(mat !=0, arr.ind = T) 
+0

¡Me alegra que estés de acuerdo! –

+0

@Cotton: la respuesta de Ramnath agregó la información muy utilizada de que había un parámetro de adición al cual se produce un resultado orientado a la matriz. Así que no lo vi aceptar tanto como hacer un mejor trabajo al inferir lo que el OP quería. –

+0

@DWin Err, ¿no es eso lo que hace el 'VERDADERO' en el código R de @Ritchie después de "o quizás"? Mala forma en un ambiente de enseñanza para no nombrar argumentos, pero las dos respuestas son las mismas. –

15
m <- matrix(c(0, 1, 1, 0), nrow = 2) 
which(m != 0) 

o tal vez

which(m != 0, TRUE) 
Cuestiones relacionadas