Ошибка в .local (объект, ...) при попытке написать или построить растр - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть модель randomForest, которую я пытаюсь предсказать по изучаемой территории. Я могу выполнить прогноз без ошибок, и я вижу, что он создает растр, но когда я пытаюсь запустить writeRaster() или plot(), я получаю ошибку Error in .local(.object, ...) без дополнительной информации. Вот код (обратите внимание, что envStack - это растровый стек предсказателей среды, а rf.full - это объект модели randomForest):

library(here)
library(raster)
library(randomForest)
setwd(here("species", model_species, "outputs", "grids"))
fn <- paste0(model_run_name, "_raw_", Sys.Date(), ".tif")

outRas <- predict(object = envStack,
                  model = rf.full,
                  type = "prob",
                  index = 2, 
                  na.rm = TRUE,
                  filename = fn,
                  format = "GTiff",
                  overwrite = TRUE,
                  progress = "text")
writeRaster(outRas, filename = fn, format = "GTiff", overwrite = TRUE)

И вот ошибка:

 Error in .local(.Object, ...) : 

То же самое происходит, если я пытаюсь построить выходной растр:

plot(outRas)
 Error in .local(.Object, ...) :

Я включаю снимок экрана с объектами envStack и rf.full, а также растровым продуктом outRas из прогноза. Чтобы проверить, была ли проблема связана с размером файла, я использовал object.size(outRas), который возвратил 12832 bytes. Я также проверил доступное место на диске, где я хочу сохранить растр, и есть более 60 ГБ свободного места: screenshot of raster stack, rf model, and output prediction raster objects

Я не уверен, почему мин и максимальные значения неизвестны для многих растров в стеке, но просто для того, чтобы убедиться, что отдельные растры не были повреждены, я попытался построить один с отсутствующими минимальными / максимальными значениями (plot(envStack[[1]])), и он был нанесен очень хорошо : plot of first raster in envStack

Объект модели (rf.full) был успешно использован для вычисления различных метрик проверки, поэтому, насколько я знаю, с ним нет проблем, и папка где я хочу сохранить существующий выходной растр.

enter image description here

Когда я проверяю местоположение временного файла с помощью rasterTmpFile(), он возвращает файл, который не ' не существует (хотя содержащая папка существует):

rasterTmpFile()
[1] "C:/Users/username/AppData/Local/Temp/Rtmpkxfn1t/raster/r_tmp_2020-02-17_152958_23480_67648.grd"

empty temp folder

Мне кажется, я сталкивался с этой проблемой раньше, но не могу вспомнить как я решил это (или если я решил это). Смежные вопросы, которые я рассмотрел здесь, указывают на размер файла и проблемы с расположением файла, которые, как мне кажется, не являются проблемой. Некоторые намеки на проблемы с типом формата, но я сохранил другие растры как GeoTiffs на прошлой неделе на предыдущих этапах этого процесса, используя writeRaster() с format = "GTiff". Кроме того, тот факт, что я получаю ту же ошибку, когда просто пытаюсь построить outRas в R, создает впечатление, что существует проблема с самим растром. Любая помощь приветствуется.

ОБНОВЛЕНИЕ: Проблема оказалась в том, что оператор writeRaster() был ненужным. Снятие этого решило проблему. Смотрите мой ответ ниже для более подробной информации.

1 Ответ

0 голосов
/ 18 февраля 2020

Я понял, что я делаю неправильно. Этот бит кода был встроен в оператор if / else try, поэтому он пытался запустить прогноз и записать растр как часть одного и того же прогона. Однако в строке writeRaster() нет необходимости, поскольку функция predict() содержит аргумент filename= для сохранения файла. Когда он велел написать растр сразу после этого, он каким-то образом запутал R и заставил его выдать эту ошибку. Таким образом, я удалил оператор writeRaster(), и это решило проблему.

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