Convertir une masortingce en un tableau à 1 dimension

J’ai une masortingce (32X48).

Comment puis-je convertir la masortingce en un tableau à une seule dimension?

Soit le lire avec ‘scan’, ou simplement as.vector () sur la masortingce. Vous voudrez peut-être transposer la masortingce en premier si vous le souhaitez par lignes ou colonnes.

> m=masortingx(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 nous parlons de data.frame, alors vous devriez vous demander quelles sont les variables du même type? Si tel est le cas, vous pouvez utiliser rappe, ou unlist, car data.frames sont des listes, profondément dans leur âme …

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

essayez c()

 x = masortingx(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 

array(A) ou array(t(A)) vous donnera un tableau 1-d.

From ?masortingx : “Une masortingce est le cas particulier d’un” tableau “bidimensionnel.” Vous pouvez simplement modifier les dimensions de la masortingce / tableau.

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

Il pourrait être si tard, de toute façon voici ma façon de convertir Masortingx en vecteur:

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

espère que cela aidera

Vous pouvez utiliser la solution de Joshua mais je pense que vous avez besoin de Elts_int <- as.matrix(tmp_int)

Ou pour des boucles:

 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 est un vecteur 1d.

Simple et rapide car un tableau 1d est essentiellement un vecteur

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

Si vous aviez plutôt un data.frame (df) qui avait plusieurs colonnes et que vous voulez vectoriser, vous pouvez le faire

as.masortingx (df, ncol = 1)

vous pouvez utiliser as.vector() . Il semble que ce soit la méthode la plus rapide selon mon petit benchmark, comme suit:

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

La première solution utilise as.vector() , la seconde utilise le fait qu'une masortingce est stockée en tant que tableau contigu dans la mémoire et length(m) donne le nombre d'éléments dans une masortingce m . Le troisième instancie un array de x et le quasortingème utilise la fonction concaténée c() . J'ai aussi essayé unmasortingx de gdata , mais c'est trop lent pour être mentionné ici.

Voici quelques résultats numériques que j'ai obtenus:

 > 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 

L'aplatissement d'une masortingce est une opération courante dans Machine Learning, où une masortingce peut représenter les parameters à apprendre mais on utilise un algorithme d'optimisation d'une bibliothèque générique qui attend un vecteur de parameters. Il est donc courant de transformer la masortingce (ou les masortingces) en un tel vecteur. C'est le cas avec la fonction R standard optim() .