Error when trying to import NetCDF to R

2019-06-24 03:27发布

问题:

I' struggeling to open a NetCDF file in R. When I try to open it with

library(ncdf)
# read in NetCDF file
maize.nc<-open.ncdf("C:/Users/Jo/Desktop/pft_harvest_maize.nc")

I get the following error message:

 Error in R_nc_open: NetCDF: Unknown file format
 Error in open.ncdf("C:/Users/Jo/Desktop/pft_harvest_maize.nc") : 
   Error in open.ncdf trying to open file C:/Users/Jo/Desktop/pft_harvest_maize.nc

the weird thing is, that another NetCDF file with Runoff-Data from the exact same simulation with the exact same datatype opens without any problems.

The difference in filesize is Runoff: 56.1 MB (58,870,472 Bytes) and harvest: 149 MB (156,968,508 Bytes). So the files are actually not too big to fail when opening. Has anybody an idea how I can trackback the error that causes this problem??

Using the RNetCDF Package I get the same problem (Error: NetCDF: Unknown file format)

From ncdump I get:

netcdf pft_harvest_maize {
dimensions:
        time = 199 ;
        npft = 32 ;
        latitude = 78 ;
        longitude = 79 ;
variables:
        string NamePFT(npft) ;
        int time(time) ;
                time:units = "Years" ;
        float latitude(latitude) ;
                latitude:units = "degrees_north" ;
                latitude:long_name = "latitude" ;
            latitude:standard_name = "latitude" ;
            latitude:axis = "Y" ;
    float longitude(longitude) ;
            longitude:units = "degrees_east" ;
            longitude:long_name = "longitude" ;
            longitude:standard_name = "longitude" ;
            longitude:axis = "X" ;
    float harvest(time, npft, latitude, longitude) ;
            harvest:units = "gC/m2/yr" ;
            harvest:long_name = "harvested carbon" ;
            harvest:missing_value = -9999.99f ;
            harvest:_FillValue = -9999.99f 
}

the file can be found here: netCDF-file

回答1:

The dump from ncdump -k gives the netcdf file format as netCDF-4. I was able to open the file with the ncdf4 package since ncdf does not seem to be backwards compatible with version 4 files:

"However, the ncdf package does not provide an interface for netcdf version 4 files."

from the ncdf4 documentation.

library(ncdf4)
mycdf <- nc_open(file.choose(), verbose = TRUE, write = FALSE)
timedata <- ncvar_get(mycdf,'time')
lat <- ncvar_get(mycdf,'latitude')
long <- ncvar_get(mycdf,'longitude')
harvestdata <- ncvar_get(mycdf,'harvest')

str(harvestdata)

gives

num [1:79, 1:78, 1:32, 1:199] NA NA NA NA NA NA NA NA NA NA ...


回答2:

I think that the harvest maize netcdf file is simply corrupt, or not even a netcdf file (file name does not say anything about the real contents). Try and open it in NCView or dump using ncdump, if those tool also fails your file is corrupt or incomplete. In addition, if you want us to help, you need to make your file available.