2010-10-26 19 views
6

Sto provando a trasformare un array 3D in una matrice. Voglio che la terza dimensione della matrice formi la prima riga nella matrice, e questa terza dimensione dovrebbe essere letta per riga (cioè la riga 1, quindi la riga 2 ecc ... della dimensione 3 dovrebbe costituire la prima riga del matrice). Ho dato un esempio qui sotto, dove l'array ha dimensioni di 4, 3 e 5, e la matrice risultante ha 5 righe e 12 colonne. Ho una soluzione qui sotto che realizza ciò che voglio, ma sembra molto ingombrante per i grandi array (crea prima i vettori dagli elementi dell'array (per riga), quindi li raggruppa per formare la matrice). C'è un modo più elegante per farlo? Grazie in anticipo per eventuali suggerimenti.Trasforma un array 3D in una matrice in R

dat <- array(rnorm(60), dim=c(4, 3, 5)) 

results <- list(1:5)    
for (i in 1:5) { 
    vec <- c(t(dat[, , i])) 
    results[[i]] <- vec 
    } 

datNew <- rbind(results[[1]], results[[2]], results[[3]], results[[4]], results[[5]]) 
+0

Si dovrebbe cambiare la formulazione. Probabilmente si intende per "primo elemento" di un array la matrice stampata quando viene stampato l'array. Quelle matrici sono gli elementi della _3rd_ dimensione dell'array. Dal tuo esempio vedo che vuoi appiattire le prime due dimensioni. La mia risposta qui sotto ti dà quello che vuoi. – VitoshKa

+0

Grazie VitoshKa per averlo indicato - Ho modificato la domanda. – Steve

risposta

16

Usa aperm

X <- aperm(dat,c(3,2,1)) 
dim(X)<- c(5, 12) 
+0

Funziona perfettamente, grazie. – Steve