簡體   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