Попарные вычисления между растровыми слоями из двух разных растровых стеков

У меня есть 2 растровых стека. Я хочу сделать некоторую математику между парами растровых слоев из каждого стека, производя 3-ий растровый стек с тем же числом слоев, т.е.

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)
}

Или есть более эффективная функция или применить решение? Благодарю.

1 ответ

Решение

Пример данных

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 Вы можете указать имя файла для записи результата на диск

Другие вопросы по тегам