来自两个不同栅格堆栈的栅格层之间的成对计算
Pairwise calculations between raster layers from two different raster stacks
我有 2 个光栅堆栈。我想在每个堆栈的成对栅格层之间做一些数学运算,生成具有相同层数的第三个栅格堆栈,即;
r1<- raster stack 1 # 10 raster layers
r2<- raster stack 2 # 10 raster layers
r3<- sqrt(r1^2 + r2^2) # 10 raster layers
这是否等同于循环形式(用于说明目的);
for (i in 1:10) {
r <- sqrt(r1[[i]]^2 + r2[[i]]^2)
r3 <-stack(r3,r)
}
或者有更高效的function或apply解决方案吗?谢谢。
示例数据
library(raster)
s <- stack(system.file("external/rlogo.grd", package="raster"))
你确实可以做到
x <- sqrt(s^2 + s^2)
另一种方法是
y <- overlay(s, s, fun=function(x, y) { sqrt(x^2 + y^2) } )
结果是一样的:
all(values(x-y) == 0)
#[1] TRUE
不同之处在于,如果您使用 overlay
,您可以提供一个文件名以将结果写入磁盘
我有 2 个光栅堆栈。我想在每个堆栈的成对栅格层之间做一些数学运算,生成具有相同层数的第三个栅格堆栈,即;
r1<- raster stack 1 # 10 raster layers
r2<- raster stack 2 # 10 raster layers
r3<- sqrt(r1^2 + r2^2) # 10 raster layers
这是否等同于循环形式(用于说明目的);
for (i in 1:10) {
r <- sqrt(r1[[i]]^2 + r2[[i]]^2)
r3 <-stack(r3,r)
}
或者有更高效的function或apply解决方案吗?谢谢。
示例数据
library(raster)
s <- stack(system.file("external/rlogo.grd", package="raster"))
你确实可以做到
x <- sqrt(s^2 + s^2)
另一种方法是
y <- overlay(s, s, fun=function(x, y) { sqrt(x^2 + y^2) } )
结果是一样的:
all(values(x-y) == 0)
#[1] TRUE
不同之处在于,如果您使用 overlay
,您可以提供一个文件名以将结果写入磁盘