r - 有没有办法简化/循环栅格堆栈子集?
问题描述
我正在尝试简化我的代码。我有一个包含 194 个栅格层的栅格堆栈。我想像下面这样对它进行子集化。有没有更简单的方法来实现这一点?
stacked <- stack(example)
yr1 <- subset(stacked, 1:6)
yr2 <- subset(stacked, 7:18)
yr3 <- subset(stacked, 19:30)
yr4 <- subset(stacked, 31:42)
yr5 <- subset(stacked, 43:54)
yr6 <- subset(stacked, 55:66)
yr7 <- subset(stacked, 67:78)
yr8 <- subset(stacked, 79:90)
yr9 <- subset(stacked, 91:102)
yr10 <- subset(stacked, 103:114)
yr11 <- subset(stacked, 115:126)
yr12 <- subset(stacked, 127:138)
yr13 <- subset(stacked, 139:150)
yr14 <- subset(stacked, 151:162)
yr15 <- subset(stacked, 163:174)
yr16 <- subset(stacked, 175:186)
yr17 <- subset(stacked, 187:194)
我希望有 17 个新的栅格堆栈,每个堆栈都包含上述栅格图层。
解决方案
如果类间隔不一致并且您需要定义间隔,那么执行此操作的一种方法如下:
library(raster)
#reproducible example
set.seed(987)
# setting up example raster stack
r1 <- raster(nrows = 1, ncols = 1, res = 0.5, xmn = -1.5, xmx = 1.5, ymn = -1.5, ymx = 1.5, vals = runif(36, 1, 5))
r.stack <- stack(lapply(1:20, function(i) setValues(r1,runif(ncell(r1)))))
#solution using a list
out <- list()
for (i in 1:5) {
intervals <- c(1,4,7,11,16,21)
s <- c(intervals[[i]]:intervals[[i+1]])
out[[i]] <- subset(r.stack,s[1:length(s)-1]) #remove the last one as it doesnt belong to the class
}
推荐阅读
- java - 在 IntelliJ Javadoc 渲染中包含所有 @implSpec 部分
- groovy - 如何通过 IBM MQ 使用 JMS 点对点消息传递模型来测量 SuT 的响应(处理)时间?
- gtsummary - 如何计算 3 组或更多组之间的 SMD?
- node.js - 使用 `sequelize` 和复合键进行查询
- php - PHP多维关联数组循环
- android - 无法解析符号“TextRecognizer”
- matrix - 根据输入的矩阵创建大小为 n 的向量
- pandas - 以熊猫方式转换张量流方法,时间戳转为秒浮点数
- python - PySpark如何用产生错误的名称重命名列?
- python - TF Lite 模型 - 在完全连接的层中强制对称滤波器权重