为什么 raster 并不总是打印 brickRaster 的所有信息? [r]

why raster doesn't always print all information of a brickRaster? [r]

我正在使用包 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)。另一个问题是有时它显示 min/max,有时不显示,有时格式很古怪(这里显示正常但在我的 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, ...

保存和重新加载工作区是不好的做法。它会产生很多问题,不幸的是 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"

如果您不展示古怪的格式,我将无法发表评论。