terra 函数来提取一个变量的所有波段? (相当于砖('x',varname='y'))

时间:2021-06-05 15:48:02

标签: r raster netcdf terra

我有一个包含 79 个变量的 netcdf 文件,每个变量有 365 个波段(一年中的每一天一个)。我想读取一个变量的所有波段(即具有 365 层的栅格)。使用“光栅”包,这将按如下方式工作:

dailyvalues <- brick('GLOBAL_2010_day.nc', varname ='WDEP_PREC')

结果是一个具有 365 层的 RasterBrick:

> dailyvalues 
class      : RasterBrick 
dimensions : 180, 360, 64800, 365  (nrow, ncol, ncell, nlayers)
resolution : 1, 1  (x, y)
extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs 
source     : GLOBAL_2010_day.nc 
names      : X2010.01.01, X2010.01.02, X2010.01.03, X2010.01.04, X2010.01.05, X2010.01.06, X2010.01.07, X2010.01.08, X2010.01.09, X2010.01.10, X2010.01.11, X2010.01.12, X2010.01.13, X2010.01.14, X2010.01.15, ... 
Date       : 2010-01-01, 2010-12-31 (min, max)
varname    : WDEP_PREC 

但是我还没有成功地使用 'terra' 包来做到这一点。我试过了

dailyvalues <- rast('GLOBAL_2010_day.nc')
> dailyvalues
class       : SpatRaster 
dimensions  : 180, 360, 28835  (nrow, ncol, nlyr)
resolution  : 1, 1  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs 
sources     : GLOBAL_2010_day.nc:WDEP_PREC  (365 layers) 
              GLOBAL_2010_day.nc:WDEP_SOX  (365 layers) 
              GLOBAL_2010_day.nc:WDEP_OXN  (365 layers) 
              ... and 76 more source(s)
varnames    : WDEP_PREC (WDEP_PREC) 
              WDEP_SOX (WDEP_SOX) 
              WDEP_OXN (WDEP_OXN) 
              ...
names       : WDEP_PREC_1, WDEP_PREC_2, WDEP_PREC_3, WDEP_PREC_4, WDEP_PREC_5, WDEP_PREC_6, ... 
unit        :          mm,          mm,          mm,          mm,          mm,          mm, ... 
time        : 2010-01-01 18:00:00 to 2010-12-31 12:00:00 

生成的 SpatRaster 有 79 个“源”,但是如果我想提取一个“源”,要使用的语法是什么?在 rast 函数中添加 varname = 'WDEP_PREC' 不起作用。我尝试过 dailyvalues$... 但这仅调用单层(如“名称”下所列)。

2 个答案:

答案 0 :(得分:1)

要使用的参数在 terra 中称为 subds

dailyvalues = rast("GLOBAL_2010_day.nc", subds="WDEP_PREC")

答案 1 :(得分:1)

你应该能够做到(正如@dww所说)

dailyvalues = rast("GLOBAL_2010_day.nc", subds="WDEP_PREC")

或者你可以制作一个 SpatRasterDataset

x = sds("GLOBAL_2010_day.nc")

然后提取你想要的子数据集

r <- x["WDEP_PREC"]

r <- x[1]

此外,您还可以这样做

r <- rast('NETCDF:"GLOBAL_2010_day.nc:WDEP_PREC":WDEP_PREC')

(要使上述工作正常运行,您可能需要将路径添加到文件名,或将您的工作目录设置为它所在的位置)

相关问题