r растр не может получить, если еще logi c для работы с переменной, которая является константой - PullRequest
2 голосов
/ 01 мая 2020

Я пытаюсь сделать некоторые условные логи c на своем растровом кирпиче. В приведенном ниже коде myFun1 правильно генерирует raster.out1. Но myFun2 генерирует ошибку при попытке произвести raster.out2. Сообщение об ошибке:

Ошибка, в которой (тест): аргумент 'which' не является логическим

Кроме использования переменной со значением 5, эти две функции выглядят одинаково. Я что-то упускаю явно.

library(raster)
raster.in <- raster(nrows=100, ncols=100)
raster.in[] <- runif(ncell(raster.in), min = -10, max = 10)

const1 <- 5

myFun1 <- function(x, ...) { 
  ifelse(x <= 5, 5, x  )
}

raster.out1 <- calc(raster.in, fun = myFun1)

myFun2 <- function(x, tbase, ...) { 
  ifelse(x <= tbase, tbase, raster.in)
}
raster.out2 <- calc(raster.in, fun = myFun2(x = raster.in, tbase = const1))

Ответы [ 2 ]

2 голосов
/ 01 мая 2020

ответ astrofunkswag верен, но есть более прямые способы получить то, что вы хотите, с помощью clamp или reclassify

r1 <- clamp(raster.in, const1)

r2 <- reclassify(raster.in, cbind(-Inf, const1, const1))

Существует также скрытый (и менее эффективный) метод ifel

r3 <- raster:::.ifel(raster.in < const1, const1, raster.in)
2 голосов
/ 01 мая 2020

Два вопроса: в вашей функции должно быть x вместо raster.in, а чтобы добавить функцию с несколькими параметрами, вам потребуется дополнительный код:

myFun2 <- function(x, tbase, ...) { 
  ifelse(x <= tbase, tbase, x)
}


calc(raster.in, function(x){myFun2(x, tbase = const1)})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...