2011-09-08 18 views
56

Cuando subconjunto una matriz a una sola columna, el resultado es de clase numérica, no de matriz (es decir, myMatrix [, 5] para subconjuntos a la quinta columna). ¿Hay una manera compacta al subconjunto a una sola columna, mantener el formato de la matriz, y mantener los nombres de fila/columna sin hacer algo complicados como:Cómo subconjuntar la matriz en una columna, mantener el tipo de datos de matriz, mantener los nombres de fila/columna?

matrix(myMatrix[ , 5 ] , dimnames = list(rownames(myMatrix) , colnames(myMatrix)[ 5 ]) 

Respuesta

78

utilizar el argumento drop=FALSE a [.

m <- matrix(1:10,5,2) 
rownames(m) <- 1:5 
colnames(m) <- 1:2 
m[,1]    # vector 
m[,1,drop=FALSE] # matrix 
+0

yo hubiera jurado que vi esto sólo recientemente, pero que puede haber sido el comportamiento trama de datos análoga que estaba siendo interrogado: http://stackoverflow.com/questions/6941985/r-how-to-subset-a -data-frame-in-a-list-and-return-data-frame –

+0

¡eso es asombroso! – SFun28

+1

Si desea indexar solo la primera dimensión, puede usar soltar de la siguiente manera: 'm [1,, drop = FALSE]' –

Cuestiones relacionadas