计算netcdf文件的百分位数失败

时间:2015-01-12 16:56:26

标签: r gis r-raster

我有五个netcdf文件,其中每个文件包含一个时间段的数据。我想单独计算每个细胞的整个时间跨度的第98百分位数。 netcdf文件的累积文件大小约为250 MB。

我接近这个:

library(raster)

  fileType="\\.nc$"
  filenameList <- list.files(path=getwd(), pattern=fileType, full.names=F, recursive=FALSE)
  #rasterStack for all layers
  rasterStack <- stack()

  #stack all data
  for(i in 1:length(filenameList)){

    filename <- filenameList[i]
    stack.temp<-stack(filename)
    rasterStack<-stack(rasterStack, stack.temp)

  }

  #calculate raster containing the 98th percentiles
  result <- calc(rasterStack,  fun = function(x) {quantile(x,probs = .98,na.rm=TRUE)} )

然而,我收到此错误:

Error in ncdf4::nc_close(x@file@con) : 
  no slot of name "con" for this object of class ".RasterFile"

我的代码的堆叠部分工作,崩溃发生在calc函数期间。 你知道这可能来自哪里吗?这可能是数据存储位置的问题(内存/磁盘)吗?

2 个答案:

答案 0 :(得分:0)

奇怪,我生成了一些虚拟数据,它似乎工作正常,它似乎不是你的方法。 250MB不是太大了。我会剪辑每个光栅的一小部分并测试它是否有效。

dat<-matrix(rnorm(16), 4, 4)
r1<-raster(dat)
r2<-r1*2
r3<-r2+1
r4<-r3+4
rStack <- stack(r1,r2,r3,r4)
result <- calc(rStack,  fun = function(x) {quantile(x,probs = .98)} )

答案 1 :(得分:0)

也许这与您创建RasterStack的奇怪方式有关。你应该这样做:

  filenames <- list.files(pattern="\\.nc$")
  rasterStack <- stack(filenames)