我想根据for loop
中的seq
用reclassify function
将raster package
的栅格重新分类,以下代码的输出为空,我不明白为什么。
#create a random raster
sam <- sample(seq(0,1,0.01), 1000*1000, replace = TRUE)
r1 <- raster(nrows = 1000, ncols = 1000, vals = sam)
#create the scale for reclassify
scale <- seq(0,1,0.2)
#the for loop
cl_r <- for (i in 1:length(scale)){
reclassify(r1, c(scale[i], scale[i+1], scale[i+1]))
}
输出:
> cl_r
NULL
我想scale[i+1]
可以使R理解scale[1+1]
。
答案 0 :(得分:2)
从您的问题中推断出您的数字在0到1之间,并且希望将它们分为0.2组(0到0.2、0.2到0.4等)。如果是这样,有多种方法可以做到这一点。
示例数据
library(raster)
r <- raster(nrows=10, ncols=10)
#values(r) <- runif(ncell(r))
values(r) <- seq(0.01, 1, .01)
最简单的方法是使用cut
x <- cut(r, seq(0,1,.2))
您可以像这样使用重分类
m <- cbind(seq(0,.8,.2), seq(0.2,1,.2), 1:5)
y <- reclassify(r, m)
或者是代数方法
z <- ceiling(r * 5)
此外,如果您要像这样循环scale
,请注意,最后您会得到NA
。
scale <- seq(0,1,0.2)
for (i in 1:length(scale)) {
cat(scale[i], "-", scale[i+1], "\n")
}
#0 - 0.2
#0.2 - 0.4
#0.4 - 0.6
#0.6 - 0.8
#0.8 - 1
#1 - NA
这样做会更清洁
for (i in 2:length(scale)) {
cat(scale[i-1], "-", scale[i], "\n")
}
#0 - 0.2
#0.2 - 0.4
#0.4 - 0.6
#0.6 - 0.8
#0.8 - 1
大概是您的意图
rc <- r
for (i in 2:length(seq(0,1,0.2))) {
rc <- reclassify(rc, cbind(scale[i-1], scale[i], scale[i]))
}
rc