我使用包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, ...
答案 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"
如果您不显示古怪的格式,我无法评论。