Работа с условными выражениями в 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 )