我有五个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函数期间。 你知道这可能来自哪里吗?这可能是数据存储位置的问题(内存/磁盘)吗?
答案 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)