2015-05-19 11 views
6

Ho un allineamento 3D in R costruito come (anche se i nomi non sembrano presentarsi):Scrivere e leggere le matrici 3D in R

v.arr <- array(1:18, c(2,3,3), dimnames = c("A", "B", "X", 
          "Y","Z","P","Q","R")) 

e si vede in questo modo una volta stampata allo schermo :

, , 1 

    [,1] [,2] [,3] 
[1,] 1 3 5 
[2,] 2 4 6 

, , 2 

    [,1] [,2] [,3] 
[1,] 7 9 11 
[2,] 8 10 12 

, , 3 

    [,1] [,2] [,3] 
[1,] 13 15 17 
[2,] 14 16 18 

io lo scrivo in un file utilizzando:

write.table(v.arr, file = “Test Data”) 

ho poi leggere di nuovo con:

01.235.164,106 mila
test.data <- read.table(“Test Data”) 

e ottengo questo:

X1 X2 X3 X4 X5 X6 X7 X8 X9 
1 1 3 5 7 9 11 13 15 17 
2 2 4 6 8 10 12 14 16 18 

Ovviamente, ho bisogno di fare qualcosa a uno strutturare il file prima di scrivere o ristrutturare sul read-back per tornare la matrice 3D. Posso sempre ristrutturare i dati che ottengo dalla lettura. È l'approccio migliore? Grazie in anticipo.

+2

Vuoi utilizzare questi dati in R o anche leggerla con altri software? Se solo con R, perché non usare semplicemente il formato .rda (RData) con i comandi 'save' (e' load') ..? – Tim

+0

Qual è lo scopo dell'argomento dimnames nella costruzione dell'array? Sembra essere ignorato. Penso che doveva essere una lista con tre voci per avere un effetto qualsiasi ... I dimnames – gvrocha

+0

assegneranno i nomi alle dimensioni dell'array, ma ho dovuto aggiungere 'list' al vettore del nome. Sarà ignorato se si verifica un errore.Sì, la risposta qui sotto che suggerisce che io uso il formato RData è una buona soluzione. Se ho bisogno di esportare i dati, attraverserò il ponte quando ci arrivo. Grazie, tutti per i commenti. – Ernie

risposta

5

Il problema è che si sta utilizzando write.table per eseguire questa operazione, quindi è (credo) forzare l'array su un tavolo. Se stai cercando di salvarlo e non importa che sia in un formato R specifico, puoi facilmente utilizzare le funzioni e load.

save(v.arr,file = "~/Desktop/v.arr.RData") 
rm(list=ls()) 

load("~/Desktop/v.arr.RData") 
v.arr 
+0

Sì, si tratta di dati intermedi interni e questa è una soluzione perfetta. Non prevedere la necessità di esportarlo al momento. Grazie!! – Ernie

+0

L'uso corretto dei dimnames in questo modo dovrebbe essere: dimnames = list (c ("A", "B"), c ("X", "Y", "Z"), c ("P", " Q "," R "))) – Ernie

+0

Probabilmente intendeva metterlo sulla domanda? – TARehman