2010-09-29 16 views

Respuesta

157

O léalo con 'escanear', o simplemente haga como .vector() en la matriz. Es posible que desee transponer la matriz primero si lo desea por filas o columnas. Las soluciones publicadas hasta ahora son tan brutos que ni siquiera voy a probarlos ...

> m=matrix(1:12,3,4) 
> m 
    [,1] [,2] [,3] [,4] 
[1,] 1 4 7 10 
[2,] 2 5 8 11 
[3,] 3 6 9 12 
> as.vector(m) 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 
> as.vector(t(m)) 
[1] 1 4 7 10 2 5 8 11 3 6 9 12 
+4

Esta debería ser la solución aceptada, ya que el título de la pregunta claramente dice que la entrada de matriz – C8H10N4O2

+0

transponiendo la matriz es genio! – LostLin

9

De ?matrix: "Una matriz es el caso especial de una 'matriz' bidimensional." Simplemente puede cambiar las dimensiones de la matriz/matriz.

Elts_int <- as.matrix(tmp_int) # read.table returns a data.frame as Brandon noted 
dim(Elts_int) <- (maxrow_int*maxcol_int,1) 
+1

La tabla de lectura devuelve un data.frame no una matriz. ¿Esto todavía funciona sin as.matrix()? –

+0

@Brandon no, no lo hará; ¡buena atrapada! –

1

Puede utilizar la solución de Joshua pero creo que necesita Elts_int <- as.matrix(tmp_int)

O para bucles:

z <- 1 ## Initialize 
counter <- 1 ## Initialize 
for(y in 1:48) { ## Assuming 48 columns otherwise, swap 48 and 32 
for (x in 1:32) { 
z[counter] <- tmp_int[x,y] 
counter <- 1 + counter 
} 
} 

z es un vector 1d.

27

Si estamos hablando de hoja.de.datos, entonces usted debe preguntarse son las variables del mismo tipo? Si ese es el caso, puede utilizar rapply o no listados, ya data.frames son listas, en lo profundo de sus almas ...

data(mtcars) 
unlist(mtcars) 
rapply(mtcars, c) # completely stupid and pointless, and slower 
+0

'unlist' funcionó para mí. –

23

tratar c()

x = matrix(1:9, ncol = 3) 

x 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 
[3,] 3 6 9 

c(x) 

[1] 1 2 3 4 5 6 7 8 9 
+0

Eso es un vector, y no un conjunto de 1 día. – hadley

+0

hmm. Es verdad. Tal vez no sea una matriz de 1-d, sino un vector de 1-d. – Greg

10

array(A) o array(t(A)) te dará una matriz de 1 d.

1

simple y rápido desde una matriz 1d es esencialmente un vector

vector <- array[1:length(array)] 
5

Puede ser que sea tan tarde, de todos modos aquí está mi proyecto de convertir la matriz de vectores:

library(gdata) 
vector_data<- unmatrix(yourdata,byrow=T)) 

esperanza de que le ayudará

1

Si en su lugar tenía un data.frame (df) que tenía varias columnas y desea vectorizar, puede hacer

as.matrix (df, ncol = 1)

+0

Esto también funcionaría para una matriz. –

1

puede usar as.vector(). Parece que es el método más rápido de acuerdo con mi pequeño punto de referencia, como sigue:

library(microbenchmark) 
x=matrix(runif(1e4),100,100) # generate a 100x100 matrix 
microbenchmark(y<-as.vector(x),y<-x[1:length(x)],y<-array(x),y<-c(x),times=1e4) 

La primera solución utiliza as.vector(), la segunda utiliza el hecho de que una matriz se almacena como una matriz contigua en la memoria y length(m) da la número de elementos en una matriz m. El tercero instancia un array de x, y el cuarto usa la función de concatenación c(). También probé unmatrix desde gdata, pero es demasiado lento para mencionarlo aquí.

Éstos son algunos de los resultados numéricos que obtuve:

> microbenchmark(
     y<-as.vector(x), 
     y<-x[1:length(x)], 
     y<-array(x), 
     y<-c(x), 
     times=1e4) 

Unit: microseconds 
       expr min  lq  mean median  uq  max neval 
    y <- as.vector(x) 8.251 13.1640 29.02656 14.4865 15.7900 69933.707 10000 
y <- x[1:length(x)] 59.709 70.8865 97.45981 73.5775 77.0910 75042.933 10000 
     y <- array(x) 9.940 15.8895 26.24500 17.2330 18.4705 2106.090 10000 
      y <- c(x) 22.406 33.8815 47.74805 40.7300 45.5955 1622.115 10000 

aplanamiento una matriz es una operación común en aprendizaje automático, donde una matriz puede representar los parámetros de aprender, pero uno utiliza un algoritmo de optimización de un genérico biblioteca que espera un vector de parámetros. Por lo tanto, es común transformar la matriz (o matrices) en dicho vector. Es el caso con la función R estándar optim().

Cuestiones relacionadas