2016-07-12 18 views
1

Ich möchte eine Schleife schreiben, die eine Tabelle aus einem dreidimensionalen Array extrahiert und sequenziell in einen Datenrahmen als Spalte schreiben.Kombinieren für Schleife Ausgang

Der Code, den ich so weit habe

library(ncdf4) 

test <- nc_open("NorESM_TREFHT_cont_mem1-60_2006-2099.nc") 
temp <- ncvar_get(test, "TREFHT", count = c(144,96,60,1)) 
drop(temp) 
lat<- ncvar_get(test, "lat") 
lon <- ncvar_get(test,"lon") 
lonlat <- expand.grid(lon, lat) 
for (n in 1:60) { 
member <- array(temp[1:144,1:96,n]) 
ensemble <- as.vector(member) 
h <- data.frame(cbind(lonlat, ensemble[n])) 
} 

Zur Zeit der Code ohne die Schleife arbeitet (für n = 1,2 etc.) aber nur kombiniert den letzten Lauf in dem for-Schleife Ausgang für n = 1:60

+0

Ich denke, Sie haben Funktionen dort, die nicht primitiv zu R sind. Können Sie uns das Paket sagen, woher sie kommen? –

+0

Ich arbeite mit NetCDF4-Dateien mit dem Paket ** ncdf4 ** – Dylan

+1

Können Sie auch ein Beispiel für wie Test aussehen? Ich kann Ihr Problem nicht wiederherstellen, da ich keinen Zugriff auf diese .nc-Datei habe. –

Antwort

1

Ihre h wird noch nicht verwendet; mit anderen Worten nutzlos. Wahrscheinlich möchten Sie in jedem Schritt n die Variable ensemble zu Ihren lonlat Daten hinzufügen. Ihr Code sollte also lonlat <- data.frame(cbind(lonlat, ensemble[n])) lauten.

+0

Diese Lösung hat perfekt funktioniert. Ich habe mich gefragt, ob du weiter sagen könntest, dass du nutzlos bist. Ich bin ein neuer Benutzer und ich verstehe einige der Dynamik von Objekten in r nicht vollständig. – Dylan

+1

@Dylan Bei jeder Ausführung der 'for-Schleife 'wird das Objekt' h 'neu zugewiesen. Deshalb "schreibt" es über sich selbst, daher bleibt nur der letzte Ausgang "n = 60" übrig – amwill04