Ошибка в if (xn == xx) {: пропущено значение, где требуется TRUE / FALSE - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь объединить большое количество растровых плиток в одну мозаику, используя R-коды следующим образом. Появляется ошибка :

Ошибка в случае, если (xn == xx) {: пропущенное значение там, где требуется ИСТИНА / ЛОЖЬ

Ошибка появляется после цикла for.

Я буду очень признателен за ваше предложение.

require(raster)
rasters1 <- list.files("D:/lidar_grid_metrics/ElevMax", 
                   pattern="*.asc$", full.names=TRUE, recursive=TRUE)
rast.list <- list()
   for(i in 1:length(rasters1)) { rast.list[i] <- raster(rasters1[i]) }

rast.list$fun <- mean
    rast.mosaic <- do.call(mosaic,rast.list)
plot(rast.mosaic)

1 Ответ

0 голосов
/ 26 января 2019

Сначала лучший способ написать, что вы делаете (используйте lapply)

library(raster)
ff <- list.files("D:/lidar_grid_metrics/ElevMax", 
                   pattern="\\.asc$", full.names=TRUE, recursive=TRUE)
rast.list <- lapply(ff, raster)

rast.list$fun <- mean
rast.mosaic <- do.call(mosaic,rast.list)

Теперь к ошибке вы получите. Полезно показать результаты traceback() после возникновения ошибки. Но из полученного сообщения об ошибке я делаю вывод, что один из RasterLayers имеет экстент со значением NA. Это делает его недействительным. Вы можете проверить, правда ли это (и если это так, выяснить, что происходит), выполнив

t(sapply(rast.list, function(i) as.vector(extent(i))))

РЕДАКТИРОВАТЬ

С файлами, которые отправил мне Рам, я разобрался, что происходит. При создании RasterLayer из файла ascii с собственным драйвером произошла ошибка, если в файле указано «xllcenter», а не «xllcorner».

Теперь это исправлено в версии для разработчиков (2.9-1), доступной на github .

Эту проблему также можно избежать, установив rgdal, поскольку, если доступно rgdal, собственный драйвер не будет использоваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...