NetCDF 到栅格砖 "Unable to find inherited method for function 'brick' for 'ncdf4'"

NetCDF to Raster Brick "Unable to find inherited method for function 'brick' for 'ncdf4'"

栅格包的真正简单问题,也使用 ncdf4 加载 ECMWF Era-Interim Netcdf 文件。

只需这样做:

a <- nc_open("SSTs.nc")
B <- brick(a, varname="sst")

Returns这个:

    Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘brick’ for signature ‘"ncdf4"’

该文件是全球1个月(2016年1月)的SST数据。当我将它转换成一个数组时(即提取 dimensions/variable,并将时间转换为 UTC,将它推入一个数组)我没有得到同样的错误,但是光栅包说它直接支持 .nc 文件(只要它们与 cf-1 兼容,Era-Interim .nc 就是)

非常感谢任何帮助,已尝试使用许多 Netcdf 文件(非 Era Interim)。

感谢Renaud Lancelot,谁给的清楚源码。我修改了他的代码以适应您的数据

 # load package
 library(sp)
 library(raster)
 library(ncdf4)

 # read ncdf file
 nc<-nc_open('D:/SSTs.nc')

 # extract variable name, size and dimension
 v <- nc$var[[1]]
 size <- v$varsize
 dims <- v$ndims
 nt <- size[dims]              # length of time dimension
 lat <- nc$dim$latitude$vals   # latitude position
 lon <- nc$dim$longitude$vals  # longitude position

 # read sst variable
 r<-list()
 for (i in 1:nt) {
   start <- rep(1,dims)     # begin with start=(1,1,...,1)
   start[dims] <- i             # change to start=(1,1,...,i) to read    timestep i
   count <- size                # begin with count=(nx,ny,...,nt), reads entire var
   count[dims] <- 1             # change to count=(nx,ny,...,1) to read 1 tstep

   dt<-ncvar_get(nc, varid = 'sst', start = start, count = count)

   # convert to raster
   r[i]<-raster(dt)
 }

 # create layer stack with time dimension
 r<-stack(r)

 # transpose the raster to have correct orientation
 rt<-t(r)
 extent(rt)<-extent(c(range(lon), range(lat)))

 # plot the result
 spplot(rt)