替换光栅堆栈中的 Inf、Inf

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

我似乎不知道如何替换光栅堆栈中的所有 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))

我做错了什么?

r terra
1个回答
0
投票

您可以使用

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 
© www.soinside.com 2019 - 2024. All rights reserved.