2016-08-19 52 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

相关问题