我似乎不知道如何替换光栅堆栈中的所有 Inf 和 -Inf
library(terra)
#> terra 1.7.29
nrows <- 10
ncols <- 10
set.seed(123)
r1 <- rast(nrows = nrows, ncols = ncols, xmin = 0, xmax = 10, vals = sample(0:8, nrows * ncols, replace = TRUE))
r1 <- c(rep(list(r1), 10))
values(r1[[4]]) <- NaN
values(r1[[7]]) <- NaN
r1 <- rast(r1)
r2 <- classify(r1, cbind(-Inf, 0, NA))
我做错了什么?
您可以使用
terra::subst
。
示例数据
library(terra)
#terra 1.8.0
x <- rast(ncols=10, nrows=10, nlyr=2, vals=1:200)
x[1] <- -Inf
x[2] <- Inf
解决方案
y <- subst(x, c(-Inf, Inf), NA)
y[1:3]
# lyr.1 lyr.2
#1 NA NA
#2 NA NA
#3 3 103
你也可以使用
classify
(效率有点低)
m <- cbind(c(-Inf, Inf), NA)
z <- classify(x, m)
z[1:3]
# lyr.1 lyr.2
#1 NA NA
#2 NA NA
#3 3 103
或者,效率最低的方法,使用
ifel
:
ifel(is.finite(x), x, NA)
#class : SpatRaster
#dimensions : 10, 10, 2 (nrow, ncol, nlyr)
#resolution : 36, 18 (x, y)
#extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
#coord. ref. : lon/lat WGS 84 (CRS84) (OGC:CRS84)
#source(s) : memory
#names : lyr.1, lyr.2
#min values : 3, 103
#max values : 100, 200