2016-08-19 1 views
0

Ich verwende das Paket raster, um ncdf-Dateien zu lesen, alles funktioniert gut, abgesehen von dem Verhalten, das ich erhalte, wenn ich einfach den Namen brickRaster eintippe.Warum druckt Raster nicht immer alle Informationen eines brickRasters? [r]

#load a .nc file 
temp=brick(temp.nc) 

temp 
class  : RasterBrick 
dimensions : 180, 360, 64800, 2928 (nrow, ncol, ncell, nlayers) 
resolution : 1, 1 (x, y) 
extent  : 0, 360, -90, 90 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=longlat +datum=WGS84 
data source : /fhgfs/data/work/crct/bfb16057/pgf/1.0deg/3hourly/tas_3hourly_1948-1948.nc 
names  : X1948.01.01.00.00.00, X1948.01.01.03.00.00, X1948.01.01.06.00.00, X1948.01.01.09.00.00, X1948.01.01.12.00.00, X1948.01.01.15.00.00, X1948.01.01.18.00.00, X1948.01.01.21.00.00, X1948.01.02.00.00.00, X1948.01.02.03.00.00, X1948.01.02.06.00.00, X1948.01.02.09.00.00, X1948.01.02.12.00.00, X1948.01.02.15.00.00, X1948.01.02.18.00.00, ... 
Date/time : 1948-01-01 00:00:00, 1948-12-31 21:00:00 (min, max) 
varname  : tas 
level  : 1 

aber wenn ich den Arbeitsbereich neu zu laden und direkt nur temp geben und lassen Sie R die Bibliotheken laden, erhalte ich nur diese Informationen

temp 
Loading required package: raster 
Loading required package: sp 
class  : RasterBrick 
dimensions : 180, 360, 64800 (nrow, ncol, ncell) 
resolution : 1, 1 (x, y) 
extent  : 0, 360, -90, 90 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=longlat +datum=WGS84 

und es gibt keinen Weg, es zu erhalten, die anderen Informationen angezeigt werden Ich muss die Sitzung neu starten und zuerst library(raster) laden. Ein anderes Problem ist, dass manchmal min/max angezeigt wird und manchmal nicht, und manchmal ist die Formatierung alles verrückter (hier sieht es gut aus, aber in meinem R). Hier ist ein Baustein, den ich mit der Funktion setValues ​​erstelle, wenn ich alle Layer-Namen verloren habe.

>temp 
class  : RasterBrick 
dimensions : 180, 360, 64800, 2928 (nrow, ncol, ncell, nlayers) 
resolution : 1, 1 (x, y) 
extent  : 0, 360, -90, 90 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=longlat +datum=WGS84 
data source : /tmp3/RtmpHJiJol/raster/r_tmp_2016-08-18_123238_52879_95962.grd 
names  :  layer.1,  layer.2,  layer.3,  layer.4,  layer.5,  layer.6,  layer.7,  layer.8,  layer.9,  layer.10,  layer.11,  layer.12,  layer.13,  layer.14,  layer.15, ... 
min values : 1.786824e-09, 1.786824e-09, 1.786253e-09, 1.785112e-09, 1.773258e-09, 1.377443e-09, 1.369023e-09, 2.394694e-09, 2.461454e-09, 2.507693e-09, 2.537011e-09, 2.585615e-09, 2.623897e-09, 2.651393e-09, 2.654030e-09, ... 
max values :  1.000675,  1.000675,  1.000675,  1.000675,  1.000671,  1.000674,  1.000672,  1.000668,  1.000675,  1.000675,  1.000672,  1.000675,  1.000655,  1.000675,  1.000671, ... 

Antwort

2

Speichern und erneutes Laden eines Arbeitsbereichs ist eine schlechte Vorgehensweise. Es verursacht viele Probleme, und es ist bedauerlich, dass R Sie dazu auffordert. Stattdessen sollten Sie in jeder Sitzung von vorne anfangen, indem Sie ein Skript verwenden, um das zu reproduzieren, was Sie brauchen. Wenn das viel Zeit in Anspruch nimmt, speichern Sie die Zwischendateien auf der Festplatte.

Min- und Max-Werte werden angezeigt, wenn sie bekannt sind (von der Datei bereitgestellt). Standard-ncdf-Dateien bieten diese Informationen nicht.

Der Verlust von Layernamen nach setValues ist kein Anzeigeproblem (und könnte als Feature und nicht als Fehler betrachtet werden). Hier ist Houw, das funktioniert:

library(raster) 
r <- raster(ncol=10, nrow=10) 
vals <- 1:ncell(r) 
r[] <- vals 
s <- stack(r,r) 
names(s) <- c('a', 'b') 

setValues setzt neue Layernamen basierend auf der Matrix wird es.

x <- setValues(s, cbind(vals, vals)) 
names(x) 
#[1] "vals.1" "vals.2"  

Sie können sie natürlich ändern

names(x) <- names(s) 
#[1] "a" "b" 
names(x) 

Oder alternativ, sie durch die Spalten der Matrix zu benennen:

x <- setValues(s, cbind(a=vals, b=vals)) 
names(x) 
#[1] "a" "b" 

Ich kann nicht auf verrückte Formatierung kommentieren, wenn Sie dies nicht tun Zeig es.

+0

Danke! Gibt es eine Möglichkeit, Layer-Namen zu speichern, wenn die Funktionen get/setValues ​​verwendet werden? –

+1

Ich habe das erweitert – RobertH