Respuestas:
Léalo con 'scan', o simplemente haga como.vector () en la matriz. Es posible que desee transponer la matriz primero si lo desea por filas o columnas.
> 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
Si estamos hablando de data.frame, entonces debería preguntarse si las variables son del mismo tipo. Si ese es el caso, puede usar rapply o unlist, ya que data.frames son listas, en el fondo de sus almas ...
data(mtcars)
unlist(mtcars)
rapply(mtcars, c) # completely stupid and pointless, and slower
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)
puede utilizar as.vector()
. Parece que es el método más rápido según mi pequeño punto de referencia, de la siguiente manera:
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 usa as.vector()
, la segunda usa el hecho de que una matriz se almacena como una matriz contigua en la memoria y length(m)
da el número de elementos en una matriz m
. El tercero instancia un array
from x
, y el cuarto usa la función concatenar c()
. También probé unmatrix
a partir gdata
, pero es demasiado lento para ser mencionados aquí.
Estos 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
Aplanar una matriz es una operación común en Machine Learning, donde una matriz puede representar los parámetros a aprender, pero se usa un algoritmo de optimización de una biblioteca genérica que espera un vector de parámetros. Entonces, es común transformar la matriz (o matrices) en dicho vector. Es el caso de la función R estándar optim()
.
Puedes usar la solución de Joshua pero creo que necesitas 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.