繁体   English   中英

在R中使用多元函数应用

[英]stackApply with multivariate function in R

我正在寻找在栅格数据包中使用stackApply()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 =参数。 我想确保功能是在所有层上完成的,而不是在整个层上完成,然后对每一层重复进行。

谢谢!

我认为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)

(我将实现您想要的功能,但是我不知道“用堆栈创建的向量对孤立栅格中匹配的网格像元的值进行插值”是什么意思)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM