我有两个光栅堆栈,每个堆栈大约有80000层。堆栈具有相同的范围,相同的CRS,相同的分辨率和相同的层数。我想将堆栈元素的层添加到彼此(例如stack 3 n <-stack 1 n+ stack 2 n)。到目前为止,我尝试了以下方法:
1.使用循环,这应该工作,但需要超过80000层太长的方式。
library(terra)
nlayers <- nlyr(stack1)
stack3 <- rast()
for (layer_index in 1:nlayers){
res <- stack1[[layer_index]]+stack2[[layer_index]]
stack3[[layer_index]] <- res
}
字符串
1.使用简单的“+”。此操作不会产生所需的结果。
stack3 <- stack1+stack2
identical(stack3[[1]],stack1[[1]]+stack2[[1]])
[1] FALSE
型
1.使用terra::app()抛出错误消息:
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
型
任何帮助,技巧和建议赞赏!
1条答案
按热度按时间bvhaajcl1#
最简单的方法是使用
+
。字符串
这确实有效:
型
另一种方法是
型
我认为
base::identical
方法在封装的C++对象中看到了差异(它不是 * 相同的指针 *)。您可以使用isTRUE(all.equal(x, y))
代替。为了避免混淆,我现在还在terra 1.7-67中添加了一个专用的identical<SpatRaster,SpatRaster>
方法。