R растр построить новый растр из двух существующих растров - PullRequest
0 голосов
/ 23 марта 2020

Мне нужно создать новый растр (называемый ch на основе двух растров (называемых tmin и tmax), основанный на следующих логиках c. Каждый элемент нового растра следует этому логическому алгоритму c . tmin, tmax и ch - все растровые кирпичи с одинаковыми размерами, но я решил сначала поэкспериментировать только с одиночными слоями.

if (tmin > 7) ch <- 0
if (tmax < 7) ch <- 24
else
ch <- (7 - tmin)/(tmax - tmin)

Я пытался следовать логике c этого ответ со следующим кодом. testout состоит из нулей или 24, как и ожидалось. Я не могу понять, как вставить последнюю часть логики c в этот процесс.

library(raster)
r1 <- raster()
r2 <- raster()
set.seed(10)
values(r1) <- runif(ncell(r1), min = 0, max = 10)
values(r2) <- runif(ncell(r2), min = 0, max = 10)

myFun <- function(r1, r2) {
  0*(r1 > 7)+
  24*(r2 < 7)  
}

testout <- myFun(r1, r2)

1 Ответ

1 голос
/ 24 марта 2020

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

library(raster)
r1 <- r2 <- raster(ncol=10, nrow=10)
set.seed(10)
values(r1) <- runif(ncell(r1), min = 0, max = 10)
values(r2) <- runif(ncell(r2), min = 0, max = 10)

Векторизованная функция

myFun <- function(tmin, tmax) {
    ch <- (7 - tmin)/(tmax - tmin)
    ch[tmin > 7] <- 0
    ch[tmax < 7 & tmin <= 7] <- 24
    ch
}

ch1 <- overlay(r1, r2, fun=myFun)

Недокументированная альтернатива

ifel <- raster:::.ifel
ch2 <- ifel(r1 > 7, 0, ifel(r2 < 7, 24, (7 - r1)/(r2 - r1)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...