Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

terra function to extract all bands of one variable? (equivalent to brick('x', varname='y'))

I have a netcdf file that contains 79 variables, and for each variable there are 365 bands (one for each day of the year). I want to read all bands of one variable (i.e., a raster with 365 ayers). With the 'raster' package this would work as follows:

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

Result is a RasterBrick with 365 layers:

> 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 

But I haven't suceeded to do this with the 'terra' package. I tried

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 

The resulting SpatRaster has 79 'sources', but what is the syntax to use if I want to extract one 'source'? Adding varname = 'WDEP_PREC' in the rast function doesn't work. I tried dailyvalues$... but that calls single layers only (as listed under 'names').

like image 881
Lena Avatar asked Sep 18 '25 03:09

Lena


1 Answers

You should be able to do (as @dww says)

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

Or you can make a SpatRasterDataset

x = sds("GLOBAL_2010_day.nc")

And then extract the sub-dataset you want with

r <- x["WDEP_PREC"]

or

r <- x[1]

Furthermore, you can do

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

(for the above to work you may need to add the path to the filename, or set your working directory to where it is)

like image 179
Robert Hijmans Avatar answered Sep 20 '25 19:09

Robert Hijmans