Работа с условными выражениями в R

У меня есть 3 растра, и я хочу использовать их в выражении, но я могу найти различные значения na в 3 растрах. Например: у меня может быть значение в 2 растрах, но в 3 у меня есть na, тогда в этом случае я не могу применить свое выражение.

Следуйте моему коду:

for(i in 1:length(name_BSA)){

i <- 1

if(days_BSA[i] == days_WSA[i] & days_WSA[i] == days_FDS[i]){

BSA <- raster(list_BSA[i])
WSA <- raster(list_WSA[i])
FDS <- raster(list_FDS[i])

brick <- brick(BSA, WSA, FDS)

  if(!is.na(BSA[,]) & !is.na(WSA[,]) & !is.na(FDS[,])){

       BLSA <- ((1-FDS[i])*BSA[i]) + (FDS[i] * WSA[i])

  }

  name_BLSA <- paste0("BLSA_",days_BSA[i])
  writeRaster(BLSA, file.path(main,output_folder, name_BLSA), format = "GTiff", overwrite = T)

    }

  }

Моя проблема заключается в следующем:! Is.na(BSA[,]) &! Is.na(WSA[,]) &! Is.na(FDS[,])

Эта часть не работает.

Кто-то может мне помочь?

1 ответ

Решение

Было бы легче помочь, если бы вы предоставили некоторые сгенерированные кодом примеры данных и пропустили ненужные детали, такие как for-loop и if-предложение.

Насколько я вижу, нет необходимости использовать !is.na, Если одно из значений NAрезультат тоже будет NA, Я предполагаю, что это то, что вы хотите, хотя у вас нет else пункт. Вы не должны использовать индексирование на растровых слоях с арифметическими операциями. Вы также создаете RasterBrick, не используя его.

library(raster)
# example data
output_folder = "."
f <- system.file("external/rlogo.grd", package="raster")
BSA <- raster(f, 1)
WSA <- raster(f, 2)
FDS <- raster(f, 3)

# improved code
BLSA <- (1-FDS)*BSA + FDS * WSA
name_BLSA <- file.path(output_folder, paste0("BLSA_", ".tif"))
writeRaster(BLSA, name_BLSA, overwrite = TRUE)

В качестве альтернативы, вы могли бы сделать

BLSA <- overlay(FDS, BSA, WSA, fun=function(x,y,z) { (1-x)*y + x*z }, filename=name_BLSA )
Другие вопросы по тегам