遍历光栅 R 中的大型光栅砖
looping through large rasterbrick in raster R
我如何在大型每日 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.
}
你可以这样循环:
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'))
}
我如何在大型每日 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.
}
你可以这样循环:
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'))
}