在光栅R中循环遍历大型栅格砖

时间:2018-03-26 17:10:36

标签: r raster r-raster

如何在每日大型栅格砖中执行for循环以获得年度堆栈并计算每年的最大值(年度最大值)(每堆365个文件)。 基本上,我有同样的问题,如this。因此,采用相同的问题作为样本,我如何进行for循环,计算每46个堆栈的最大值(每个堆栈有8层)。 我尝试只使用stackApply,但是当我运行整个时间段时它会给出所有black/zero value,但是如果我运行单个年份它会给出最大值(单独测试10年,我有超过100年的数据)。

library(raster)
# example data
sca <- brick(nrow=108,ncol=132,nl=365) 
values(sca) <- runif(ncell(sca)*nlayers(sca))

# indices grouping sets of 8
i <- rep(1:ceiling(365/8), each=8)
# the last period is not a complete set of 8 days
i <- i[1:nlayers(sca)]
# This does not work for me, gives output as zero.
x <- stackApply(sca, i, max)

for (i in 1:nlayers(sca)) {
  x <- sca[[i]]
  xx<-stackApply(sca, i, max)
  plot(xx)
  # etc.
}

1 个答案:

答案 0 :(得分:1)

你可以像这样循环:

library(raster)
sca <- brick(nrow=108,ncol=132,nl=365) 
values(sca) <- runif(ncell(sca)*nlayers(sca))

i <- rep(1:ceiling(365/8), each=8)
i <- i[1:nlayers(sca)]

for (j in unique(i)) {
  x <- sca[[which(j==i)]]
  xx <- max(x, na.rm=TRUE)
  # or
  # xx <- calc(x, fun=max, na.rm=TRUE, filename = patste0(i, '.tif'))
}