Skip to content
Prev 7761 / 29559 Next

netCDF header info in R

You could use

shell("ncdump -h netCDF.nc", intern = TRUE)

In the ncdf package you can print a connection and it gives you a
summary, for example:

library(ncdf)
 nc <- open.ncdf("sst.wkmean.1990-present.nc")
print.ncdf(nc)
[1] "file sst.wkmean.1990-present.nc has 4 dimensions:"
[1] "lon   Size: 360"
[1] "lat   Size: 180"
[1] "nbnds   Size: 2"
[1] "time   Size: 1046"
[1] "------------------------"
[1] "file sst.wkmean.1990-present.nc has 2 variables:"
[1] "double time_bnds[nbnds,time]  Longname:Time Boundaries Missval:1e+30"
[1] "short sst[lon,lat,time]  Longname:Weekly Mean of Sea Surface
Temperature Missval:32767"

close.ncdf(nc)


The RNetCDF package does the same, but the summary is more "ncdump-alike":

library(RNetCDF)
nc <- open.nc("sst.wkmean.1990-present.nc")
print.nc(nc)
dimensions:
        lon = 360 ;
        lat = 180 ;
        nbnds = 2 ;
        time = UNLIMITED ; // (1046 currently)
variables:
        float lat(lat) ;
                lat:units = "degrees_north" ;
                lat:long_name = "Latitude" ;
                lat:actual_range = 89.5-89.5 ;
                lat:standard_name = "latitude_north" ;
                lat:axis = "y" ;
                lat:coordinate_defines = "center" ;
        float lon(lon) ;
                lon:units = "degrees_east" ;
                lon:long_name = "Longitude" ;
                lon:actual_range = 0.5359.5 ;
                lon:standard_name = "longitude_east" ;
                lon:axis = "x" ;
                lon:coordinate_defines = "center" ;
        double time(time) ;
                time:units = "days since 1800-1-1 00:00:00" ;
                time:long_name = "Time" ;
                time:actual_range = 6939576710 ;
                time:delta_t = "0000-00-07 00:00:00" ;
                time:avg_period = "0000-00-07 00:00:00" ;
                time:standard_name = "time" ;
                time:axis = "t" ;
        double time_bnds(nbnds, time) ;
                time_bnds:long_name = "Time Boundaries" ;
        short sst(lon, lat, time) ;
                sst:long_name = "Weekly Mean of Sea Surface Temperature" ;
                sst:valid_range = -540 ;
                sst:actual_range = -1.835.63 ;
                sst:units = "degC" ;
                sst:add_offset = 0 ;
                sst:scale_factor = 0.01 ;
                sst:missing_value = 32767 ;
                sst:precision = 2 ;
                sst:least_significant_digit = 2 ;
                sst:var_desc = "Sea Surface Temperature" ;
                sst:dataset = "NOAA Optimum Interpolation (OI) SST V2" ;
                sst:level_desc = "Surface" ;
                sst:statistic = "Weekly Mean" ;
                sst:parent_stat = "Individual obs" ;
                sst:standard_name = "sea_surface_temperature" ;

// global attributes:
                :title = "NOAA Optimum Interpolation (OI) SST V2" ;
                :Conventions = "CF-1.0" ;
                :history = "Created 10/2002 by RHS" ;
                :comments = "Data described in  Reynolds, R.W., N.A.
Rayner, T.M.
Smith, D.C. Stokes, and W. Wang, 2002: An Improved In Situ and Satellite
SST Analysis for Climate, J. Climate" ;
                :platform = "Model" ;
                :source = "NCEP Climate Modeling Branch" ;
                :institution = "National Centers for Environmental Prediction" ;
                :references =
"http://www.emc.ncep.noaa.gov/research/cmb/sst_analysis/
http://www.cdc.noaa.gov/cdc/data.ncep.oisst.v2.html" ;


Unfortunately, neither package provides the metadata as an R object
and they do not use the class system to (for example) remove the need
for the ".nc" on print() and close(). The functions are not that
complicated at the R level thought, so modifying them to suit is quite
simple.

Cheers, Mike.
On Tue, Mar 2, 2010 at 11:43 PM, Ian McCallum <mccallum at iiasa.ac.at> wrote: