我正在尝试在我的光栅砖上做一些条件逻辑。在下面的代码中,myFun1
正确生成了raster.out1
。但是,myFun2
在尝试生成 raster.out2
时会生成错误。错误信息是
Error in which(test) : argument to 'which' is not logical
除了使用值为 5 的变量之外,这两个函数看起来相同。我明显遗漏了一些东西。
library(raster)
raster.in <- raster(nrows=100, ncols=100)
raster.in[] <- runif(ncell(raster.in), min = -10, max = 10)
const1 <- 5
myFun1 <- function(x, ...) {
ifelse(x <= 5, 5, x )
}
raster.out1 <- calc(raster.in, fun = myFun1)
myFun2 <- function(x, tbase, ...) {
ifelse(x <= tbase, tbase, raster.in)
}
raster.out2 <- calc(raster.in, fun = myFun2(x = raster.in, tbase = const1))
最佳答案
有两个问题,您的函数中应该使用 x
而不是 raster.in
,并且要在函数中添加多个参数,您需要一些额外的代码:
myFun2 <- function(x, tbase, ...) {
ifelse(x <= tbase, tbase, x)
}
calc(raster.in, function(x){myFun2(x, tbase = const1)})
关于r 栅格无法获得 if else 逻辑来处理常量变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61533275/