Reputation: 5522
{
dimensions:
grp = 50 ;
time = UNLIMITED ; // (0 currently)
depth = 3 ;
scalar = 1 ;
spectral_bands = 2 ;
x1AndTime = 13041 ;
x2AndTime = 13041 ;
midTotoAndTime = 13041 ;
variables:
double time(time) ;
double a1(time, hru) ;
double a2(time, hru) ;
double a3(x1AndTime, hru) ;
double a4(x2AndTime, hru) ;
double a5(hru) ;
Open the netCDF file in R
out <- ncdf4::nc_open('test.nc')
Get all the variables
ncvars <- names(out[['var']])
This gives me a list of all the variables in the netCDF file.
How can I get a list of the variables that have dimensions time
and hru
, for example?
Intended output:
List with a1, a2
Upvotes: 0
Views: 4279
Reputation: 93
nc <- ncdf4::nc_open("/some/nc/file.nc")
for (vi in seq_along(nc$var)) { # for all vars of nc file
dimnames_of_var <- sapply(nc$var[[vi]]$dim, "[[", "name")
message(length(nc$var[[vi]]$dim), " dims of var ", names(nc$var)[vi], ": ",
paste(dimnames_of_var, collapse=", "))
if (all(!is.na(match(dimnames_of_var, c("hru", "time"))))) { # order doesnt matter
message("variable ", names(nc$var)[vi], " has the wanted dims!")
}
}
Upvotes: 0
Reputation: 3794
Note: this is python, not R but illustrates the logic.
import netCDF4
out = netCDF4.Dataset("test.nc")
# list of vars w dimenions 'time' and 'hru'
wanted_vars = []
# loop thru all the variables
for v in out.variables:
# this is the name of the variable.
print v
# variable.dimensions is a tuple of the dimension names for the variable
# In R you might need just ('time', 'hru')
if out.variables[v].dimensions == (u'time', u'hru'):
wanted_vars.append(v)
print wanted_vars
Upvotes: 1