我有两个光栅堆栈,每个都有大约。 80000层。这些堆栈具有相同的范围、相同的 CRS、相同的分辨率和相同的层数。我想将堆栈的各层按元素方式相互添加(例如 stack3[[n]] <- stack1[[n]]+stack2[[n]]). I tried the following approaches so far:
library(terra)
nlayers <- nlyr(stack1)
stack3 <- rast()
for (layer_index in 1:nlayers){
res <- stack1[[layer_index]]+stack2[[layer_index]]
stack3[[layer_index]] <- res
}
stack3 <- stack1+stack2
identical(stack3[[1]],stack1[[1]]+stack2[[1]])
[1] FALSE
stack3 <- rast()
sum_layers <- function(layer1, layer2) {
layer1 + layer2
}
stack3 <- app(stack1,stack2, sum_layers)
[1] Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'fun' of mode 'function' was not found
任何帮助、技巧和建议表示赞赏!
最简单的方法是使用
+
。
library(terra)
r1 <- rast(system.file("ex/logo.tif", package="terra"))
r2 <- r1 / 2
x <- r1 + r2
这确实有效:
y <- r1[[1]] + r2[[1]]
all.equal(x[[1]], y)
#[1] TRUE
# no differences in the values
plot(x[[1]] - y)
我认为
base::identical
方法在封装的C++对象中看到了差异(它不是相同的指针)。
另一种方法是
s <- sds(r1, r2)
a <- app(s, sum)