这里我有一种方法可以用新值更新栅格的选定部分(来自this question
library(terra)
p <- vect(system.file("ex/lux.shp", package="terra"))
r <- rast(p, res=0.01)
values(r) <- 1
lux <- p[p$NAME_1 == "Luxembourg",]
r[lux] <- 3
但是现在我想用一个值向量而不是一个值来更新栅格:
len <- nrow(r[lux])
r[lux] <- 1:len
# Error: [`[`] value is too long
我不确定如何解释错误,但我认为这意味着我将错误的数据类型传递给
r[lux]
。有什么建议吗?
lux
的长度是四。
length(lux)
[1] 4
因此您可以用四个新值替换单元格值。
r[lux] <- 11:14
我知道您想用不同的数字替换
lux
覆盖的所有单元格。这种类型的更换无法做到这一点。
如果你的栅格不是很大,你可以用这样的东西来实现
library(terra)
p <- vect(system.file("ex/lux.shp", package="terra"))
r <- rast(p, res=0.01)
values(r) <- 1
lux <- p[p$NAME_1 == "Luxembourg",]
x <- rasterize(lux, rast(r))
d <- as.data.frame(x, cells=TRUE)
x[d$cell] <- 1:nrow(d)
rr <- cover(x, r)