2016-08-19 78 views
0

我正在使用包raster來讀取ncdf文件,除了我輸入brickRaster名稱時得到的行爲,一切正常。爲什麼柵格並不總是顯示brickRaster的所有信息? [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 

,但是當我重新加載工作區,只是直接鍵入temp令R加載庫,我只得到這些信息

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 

,有沒有辦法讓它顯示其他信息,我必須重新啓動會話並首先加載library(raster)。另一個問題是,它有時會顯示最小/最大值,有時不顯示,有時它的格式很古怪(這裏顯示的很好,但是在我的R中)。這是我在使用setValues函數創建的一個塊,當我失去所有圖層名稱時。

>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, ... 

回答

2

保存和重新加載工作區是不好的做法。它會產生很多問題,R不建議你這樣做。相反,在每個會話中,您應該從頭開始使用腳本來重現您所需的內容。如果這需要很長時間,則將中間文件保存到磁盤。

如果已知(由文件提供),則會顯示最小值和最大值。標準的ncdf文件不提供這些信息。

setValues之後的圖層名稱丟失不是一個顯示問題(它可以被認爲是一個功能,而不是一個錯誤)。這裏是工作時間:

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

setValues基於它得到的矩陣設置新的圖層名稱。

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

你當然也可以改變他們

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

或者,爲他們提供通過命名矩陣的列:

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

如果你不這樣做,我不能對古怪的格式發表評論展示下。

+0

謝謝!使用get/setValues函數時,有沒有辦法保存圖層名稱? –

+1

我已經擴大了這一點 – RobertH

相關問題