2012-04-10 13 views
3

Ich möchte ein Array in 3 Dimensionen erstellen.So lesen Sie mehrere Dateien in ein mehrdimensionales Array ein

Hier ist, was ich versucht:

z<-c(160,720,420) 
first_data_set <-array(dim = length(file_1), dimnames = z) 

Daten, die ich in einer Ebene lese. (nur x und y) Es gibt andere Daten im selben Format, und ich muss sie in das gleiche Array mit den ersten Daten legen. Sobald ich alle Daten gelesen habe, befinden sich alle im selben Array, aber es gibt kein Überschreiben.

Also ich denke Array muss 3 Dimensionen sein; Ansonsten kann ich nicht alle Daten behalten, die ich in der Schleife gelesen habe.

+0

Wenn Ihre Daten nicht in der 3. Dimension zusammenhängt, ich stattdessen auf eine Liste aussehen würde. Jede Menge von x, y Daten wäre eine eigene Liste, dann können Sie jede gewünschte Verarbeitung für jede Liste mit etwas wie "lapply" machen. Wenn Sie dies nicht tun, brauchen wir viel mehr Informationen, um Ihnen zu helfen ... – Justin

+0

Wie sieht 'file_1' aus? Kannst du die Ausgabe von 'dput (file_1)' einfügen oder verlinken? –

+3

Im Moment ist die Frage zu vage (und möglicherweise verwirrt). Wird meine Vote zum Schließen (und mein Kommentar) entfernen, wenn Sie ein Beispiel für Daten veröffentlichen, das eine bestimmte Antwort erlaubt. –

Antwort

7

Sagen Sie, dass Sie zwei Matrizen der Größe 3x4 haben:

m1 <- matrix(rnorm(12), nrow = 3, ncol = 4) 
m2 <- matrix(rnorm(12), nrow = 3, ncol = 4) 

Wenn Sie sie in einem Array platziert werden soll, zuerst eine Reihe von NA machen:

A <- array(as.numeric(NA), dim = c(3,4,2)) 

dann die verschiedenen Schichten füllen mit Daten:

A[,,1] <- m1 
A[,,2] <- m2 

Wie @Justin vorgeschlagen, könnten Sie auch die Matrizen in einer Liste setzen gerade zusammen:

A2 <- list() 
A2[['m1']] <- m1 
A2[['m2']] <- m2 

Matrizen von Dateien zu lesen: eine Liste mit macht es einfacher, diese Matrizen von Dateien in einem Verzeichnis zu erhalten, ohne die Abmessungen im Voraus angeben zu müssen. Angenommen, Sie möchten alle Dateien mit der Erweiterung csv:

myfiles <- dir(pattern = ".csv") 
for (i in 1:length(myfiles)){ 
    A2[[myfiles[i]]] <- read.table(myfiles[i], sep = ',') 
} 
+1

Modus (A) beginnt hier als logisch wegen der NA-Vorgabe und wird dann bei der Zuweisung neuer Werte zu numerisch gezwungen - um sicherzustellen, dass dies explizit gesteuert wird, sollte mit A <- array (as.numeric (NA), dim = c) gerechnet werden (3,4,2)) statt – mdsumner

+0

@mds danke. Ich habe meine Antwort aktualisiert –

+0

@David danke! –

Verwandte Themen