ifelse 返回尝试复制 R 中错误'S4'类型的对象



我试图将E光栅的值设置为0.987,其中b大于0.5,否则使用E中的任何值。为此,我使用以下代码

a <- raster::raster(ncol=100, nrow=100)
set.seed(2)
raster::values(a) = runif(10000, min=0.1, max=0.4)
b <- raster::raster(ncol=100, nrow=100)
set.seed(2)
raster::values(b) = runif(10000, min=0.02, max=0.8)
c <- ((b - 0.2)/(0.5 - 0.2))^2
dE <- (1 - 0.9747)*(1 - c)*0.55*0.9896
E <- raster::raster(b)
E[] = ifelse(b[]>0.5, 0.989+dE, E[])

它在错误后返回给我

rep中的错误(是,length.out=len(:尝试复制"S4"类型的对象

如何修复此错误?

您可以将terra::ifel用于此

library(terra)
set.seed(2)
a <- rast(ncols=10, nrows=10)
values(a) = runif(100, min=0.1, max=0.4)
b <- setValues(a, runif(100, min=0.02, max=0.8))    
c <- ((b - 0.2)/(0.5 - 0.2))^2    
dE <- (1 - 0.9747)*(1 - c) * 0.55 * 0.9896 + 0.989
E <- ifel(b>0.5, dE, b)

这相当于

x <- mask(dE, b>0.5, maskvalues=0)
e <- cover(x, b)

参见

plot(e, E); abline(0,1)

最新更新