用 RasterStack(栅格)或多层 SpatRaster(terra)中的数值替换 NA

问题描述 投票:0回答:0

我试图用多层光栅对象中的数值 (-9999) 替换 NA。我的问题是this问题的直接扩展,扩展到多层栅格对象。

首先,让我们从 Josh O'Brien 的帖子 构建适用于 terra 包的可重现数据。

m <- terra::rast(ncol=100, nrow=100)
n <- terra::rast(ncol=100, nrow=100)
m[] <- runif(ncell(m))
n[] <- runif(ncell(n))
m[m < 0.2] <- NA
n[n < 0.2] <- NA
sr <- c(m,n) # SpatRaster (terra)
rs <- raster::stack(sr) # transform to RasterStack (raster)

我的方法是应用 for 循环,并用 Robert Hijmans 提出的代码分别用每个栅格层的值替换 NA。我已经尝试了多层 SpatRaster 对象(terra 包)和 RasterStack 对象(光栅包)。

# Replace NA's with numeric values (raster package)
rs.na_fill <- for (i in 1:nlayers(rs)) {
  raster::reclassify(rs[[i]], cbind(NA, -9999))
}

# Replace NA's with numeric values (terra package)
sr.na_fill <- for (i in 1:nlayers(rs)) {
  terra::classify(sr[[i]], cbind(NA, -9999))

}

两次,循环运行都不会抛出错误,但最终结果(分别为 sr.na_fill 和 rs.na_fill)仍然为 NULL。

因此我的问题是:如何在多层栅格对象中用数值替换 NA?

r raster r-raster terra
© www.soinside.com 2019 - 2024. All rights reserved.