r光栅can';t获取if-else逻辑来处理常量变量
我想在我的光栅砖上做一些条件逻辑。在下面的代码中,r光栅can';t获取if-else逻辑来处理常量变量,r,r-raster,R,R Raster,我想在我的光栅砖上做一些条件逻辑。在下面的代码中,myFun1正确生成graster.out1。但是myFun2在尝试生成graster.out2时会生成错误。错误消息是 which(test)中的错误:“which”的参数不符合逻辑 除了使用值为5的变量外,这两个函数看起来完全相同。我明显遗漏了什么 library(raster) raster.in <- raster(nrows=100, ncols=100) raster.in[] <- runif(ncell(raster.
myFun1
正确生成graster.out1
。但是myFun2
在尝试生成graster.out2
时会生成错误。错误消息是
which(test)中的错误:“which”的参数不符合逻辑
除了使用值为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))
库(光栅)
raster.in两个问题中,您应该在函数中使用x
而不是raster.in
,并且要将函数与多个参数结合起来,您需要一些额外的代码:
myFun2 <- function(x, tbase, ...) {
ifelse(x <= tbase, tbase, x)
}
calc(raster.in, function(x){myFun2(x, tbase = const1)})
myFun2astrofunkswag的答案是正确的,但是有更直接的方法可以通过clamp
或重新分类
r1 <- clamp(raster.in, const1)
r2 <- reclassify(raster.in, cbind(-Inf, const1, const1))
r1主题外评论,但是Robert,我们什么时候应该从raster切换到您的新软件包terra?我不能给出准确的答案,但需要努力完成功能并消除bug。我的猜测是,到8月份,用terra取代taster应该是合理的。当然,如果你早点开始,特别是在github上的开发版本,并提供反馈,这会很有帮助。clamp正是我所需要的。但是它像克雷一样在我的硬盘上运行,而根据我的活动监视器,我有6gb的可用内存。我有时在mac上使用readAll,因为它似乎做数学运算更快。在我的新线路盒上不太好用。在光栅或terra中,是否有任何隐藏的方法可以鼓励clamp更好地利用RAM?请参阅rasterOptions
chunksize、maxmemory、Memfrac,这非常有用。我将更改默认设置,使其不那么保守。
r3 <- raster:::.ifel(raster.in < const1, const1, raster.in)