stackApply与R中的多变量函数

时间:2016-07-15 19:52:07

标签: r

我希望在光栅包中使用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 =参数。我想确保函数是通过所有图层完成的,而不是单独在整个图层上完成,然后对每个图层重复。

谢谢!

1 个答案:

答案 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;插入孤立栅格中匹配网格单元格的值;)