我希望在光栅包中使用stackApply()
并使用约()在一堆栅格之间线性插值一个栅格的网格单元。我已经编写了一个类似的函数来对数据帧进行计算,但是想在栅格堆栈而不是数据帧中的行上预先形成这个函数。我已经找到了使用带有用户定义函数的stackApply()的先前示例,但没有涉及多个变量的示例。
换句话说,我有一堆栅格和一个孤独的栅格网格(它们具有匹配的范围和分辨率)。我希望逐个单元地“钻取”堆栈,以创建值向量,并使用堆栈创建的向量线性插入单独栅格中匹配网格单元的值。
我的代码是......
require(raster)
set.seed(42)
x1 <- runif(100)
x2 <- x1
x3 <- x1
x1[sample(1:100, 30)] <- NA
x2[sample(1:100, 30)] <- NA
x3[sample(1:100, 30)] <- NA
r1 <- raster(matrix(x1, nrow=10, ncol=10))
r2 <- raster(matrix(x2, nrow=10, ncol=10))
r3 <- raster(matrix(x3, nrow=10, ncol=10))
s <- stack(r1, r2)
myfunc <- function(x,y){approx(x,c(0,1),y)}
newrast <- stackApply(stack,c(1,2), fun=myfunc(s,r3))
我对如何将多个变量传递到stackApply中的fun =参数感到困惑。我也不确定ind =参数。我想确保函数是通过所有图层完成的,而不是单独在整个图层上完成,然后对每个图层重复。
谢谢!
答案 0 :(得分:0)
我认为stackApply
不适用于此处。您可以使用calc
代替。
对于类似问题,您可以考虑raster::approxNA
s <- stack(r1, r2, r3)
x <- approxNA(s)
但如果这不起作用,你可以做像
这样的事情f <- function(x) x[1] * sum(x[-1])
y <- calc(s, f)
或者,考虑overlay
s <- stack(r1, r2)
z <- overlay(s, r3, fun=function(x, y) x * y)
(我会实现你所追求的功能,但我不知道你的意思&#34;使用堆栈创建的向量&#34;插入孤立栅格中匹配网格单元格的值;)