【问题标题】:looping through large rasterbrick in raster R循环通过光栅R中的大型光栅砖
【发布时间】:2023-03-17 18:52:01
【问题描述】:

如何在大型每日 rasterbrick 中执行 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.
}

【问题讨论】:

  • 你说“这对我不起作用,输出为零。”但它显然在示例中有效。,
  • 是的,它适用于这个例子,但是对于大型数据集(大约 100 个它运行了几个小时并给我的输出值全为零。我不知道为什么我会收到这样的错误。谢谢你。

标签: r raster r-raster


【解决方案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'))
}

【讨论】:

    猜你喜欢
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多