stack 函数只堆叠最后一个光栅文件

stack function only stacks the last raster file

我正在尝试创建一个包含 120 个光栅文件的光栅堆栈。我在循环内生成这些文件并将生成的栅格添加到栅格堆栈。代码如下:

library(raster)
stack_P_95 <- stack()
for (i in startyear:endyear)
{
file <- paste(indir,"\prec_",i,".nc",sep="")
command <- paste("cdo timmin ",file," ",workdir,"min.nc",sep="")
system(command)
command <- paste("cdo timmax ",file," ",workdir,"max.nc",sep="")
system(command)
command <- paste("cdo timpctl,95 ",file," ",workdir,"min.nc 
",workdir,"max.nc ",workdir,"P95_",i,".nc",sep="")
system(command)
grid <- raster(paste(workdir,"P95_",i,".nc",sep=""))
stack_P_95 <- stack(stack_P_95,grid)
}  
crs(stack_P_95) <- "+proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m 
+no_defs" 
writeRaster(stack_P_95,paste(outdir,model,"_P95.nc",sep=""),format="CDF",overwrite=T) 

但是我正在创建的 stack_P_95 只是将最后一个光栅重复了 n(endyear -startyear) 次。

这个问题的可能原因是什么?? 在此过程中没有生成任何错误或警告。

我已将 link 添加到我的输入文件和最终输出中: Input files

试试这个代码

r <- list()  # create list objects

for (i in startyear:endyear)
{
r[i] <- raster(paste(workdir,"temp_",i,".nc",sep=""))
}

rs <- stack(r) # create raster stack from list object

你的代码没有问题。

创建一些示例栅格:

> library(raster)
Loading required package: sp
> for(i in 2001:2005){ r = raster(matrix(i,10,10)); writeRaster(r,paste0("temp_",i,".nc"))}
Loading required namespace: ncdf4

这给了我:

$ ls
temp_2001.nc  temp_2002.nc  temp_2003.nc  temp_2004.nc  temp_2005.nc

全部不同:

$ gdalinfo temp_2004.nc | grep max
  layer#max=2004
    max=2004
$ gdalinfo temp_2001.nc | grep max
  layer#max=2001
    max=2001

现在 在干净的 R 会话中 我 运行 你的代码:

 library(raster)
 workdir="./"
 stack_1 <- stack()
 startyear = 2001
 endyear = 2004
 for (i in startyear:endyear)
 {
 tempnc <- raster(paste(workdir,"temp_",i,".nc",sep=""))
 stack_1 <- stack(stack_1,tempnc)
 }  

我得到了一个包含四个不同层的堆栈:

> range(stack_1[[1]][])
[1] 2001 2001
> range(stack_1[[2]][])
[1] 2002 2002
> range(stack_1[[3]][])
[1] 2003 2003

与您的代码不同,我的代码是完全可重现的。如果您 运行 我的代码在干净的 R 环境中并且所有层都是“2004”,那么您的系统就会出现严重错误。如果图层与我的相同,那么您的文件或代码有问题,您没有向我们展示。