为什么栅格并不总是打印brickRaster的所有信息? [R]

时间:2016-08-19 12:28:50

标签: r raster r-raster

我使用包raster来读取ncdf文件,除了我输入brickRaster名称时的行为,一切正常。

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

1 个答案:

答案 0 :(得分: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"

如果您不显示古怪的格式,我无法评论。