我试图运行与我想要满足所有3个不同的条件,在每个单元格光栅叠加功能(使用==
和>
或<
运营商),以满足三个不同的条件和产生单个光栅作为输出。覆盖栅格使用ifelse
运行ifelse
与&
运算符似乎以从左到右的线性方式查看条件 - 如果满足前两个条件,则会生成if条件作为输出,而不管第三个条件如何。这里不能使用&&
,因为结果不是矢量化的。
您可以通过以下其中与生成的栅格很明显,它不评估所有三个参数这个例子中看到这一点。第一个线索是,即使第三个栅格中的某些值为NA,它也会产生结果。
我想我可以通过首先检查x和y的条件,然后用这个结果分别检查z的条件和一个不同的函数来得到我想要的结果,但我希望能够做到这一切一个功能(至少应该是这样的)。
希望有人可以点我在正确的方向。
library(raster)
fn <- system.file("external/test.grd", package="raster")
s <- stack(fn, fn,fn)
#Create grids
s[[1]] <- round(runif(ncell(s), 1, 2))
s[[2]] <- round(runif(ncell(s), 1, 2))
s[[3]] <- round(runif(ncell(s), 1, 2))
#convert some values in s[[3]] to NA
s[[3]][s[[3]] == 1]<- NA
#run overlay function
result.rast <- overlay(s[[1]], s[[2]], s[[3]], fun =
function(x,y,z) {
ifelse(x == 2 & y == 1 & z ==2, 1, 0)
})
我应该更清楚地知道NA值是我考虑的一个重要因素。我想要发生的是,如果它正在考虑的任何单元是NA,则函数不能计算出一个值(即返回NA)。在经过初始条件之后,RobertH的'f2'实质上是这样做的。非常感谢大家。 – DJ77