我想在 R 中执行邻域分析以平滑我拥有的图层,但保持输入栅格的所有 NA 不变。
但是,例如,当我执行以下操作时,计算会在 NA 值上“传播”——在我的情况下,这是一种不受欢迎的行为。
library(terra)
library(dplyr)
# load example raster in metric system
f <- system.file("ex/elev.tif", package="terra")
r <- rast(f) %>%
terra::project("EPSG:32631")
# focal
neigh <- terra::focal(r, w = 7, fun = "mean")
# plot
plot(c(r, neigh))
更新:
按照下面@dww 提出的建议,我可以使用terra::mask
. 那么,解决这个问题的方法是:
# focal
neigh <- terra::focal(r, w = 7, fun = "mean") %>%
terra::mask(mask = r)
# plot
plot(c(r, neigh))
是否有另一种方法可以避免将值传播到 NA 单元格内focal
?
(这里是计算平均值的方形滤波器的一个简单示例,但我正在搜索对所有类型的滤波器都有用的东西,例如由 定义的任何矩阵terra::focalMat()
)
在定义权重矩阵时我应该处理这个问题吗?