Попытка понять, почему, когда я читаю в растре NDVI, слот @ data @ values не содержит фактических значений, пока я не установлю их вручную. Например:
NDVI <- raster("./filename.tif", crs="+proj=longlat +datum=WGS84")
NDVI@data@values
## returns: logical(0)
Этого не произошло с другими растрами, которые я загружал тем же способом, поэтому я запутался. Я хотел бы быть более конкретным, но я не помню, чтобы что-то делал иначе. Достаточно просто получить значения вручную, используя:
NDVI1@data@values <- getValues(NDVI19east)
Но все равно это сложно сделать для каждого файла. Итак, вопрос из двух частей:
Почему это произошло в первую очередь? Я понимаю, что это может быть связано с тем, как хранится растровый файл (т.е. находится ли он в памяти или нет), но я не могу понять, как это меняет методы, которые я должен использовать для доступа к данным ...
Есть ли способ автоматизировать этот процесс (возможно, используя метод, аналогичный lapply) для чтения файлов как RasterLayers и доступа к значениям для этих файлов? Мой текущий проект предполагает чтение 6-10 файлов одновременно для NDVI, Rainfall и других переменных среды, чтобы объединить их и выполнить некоторые взвешенные наложения. Было бы полезно автоматизировать процесс импорта данных.
logical(0)
в действительности значение для любого растрового * объект , созданный из файла. В любом случае, как говорит @mdsumner, не читайте эти значения напрямую и, конечно, не устанавливайте их! (хотяNDVI1@data@values <- getValues(NDVI19east)
это ни на что не повлияет , эти значения игнорируются). Вероятно, дальше по сценарию вы не понимаете, как эффективно использовать эти объекты. Вы можете использовать getValues, но даже это редко необходимо. Предоставьте простой, автономный пример того, чего вы пытаетесь достичь.Ответы:
На этот вопрос ответили в комментариях (от mdsummer ). Это просто способ привести эти идеи в порядок и вывести этот вопрос из очереди без ответа.
Здесь вы можете скачать NVDI jpg по всему миру из НАСА .
Здесь у вас есть код и растровый файл для тестирования .
Как показано в вопросе, загрузка растра в R с помощью функции raster () не загружает фактические значения в память.
Как вы видите, NVDI @ data @ values не имеет значений, в то время как график может быть отображен, показывая эти «скрытые» значения. Вы можете видеть, что, если вы загружаете файл в QGIS, значения фактически читаются.
Итак, вы должны использовать функцию readAll () из растрового пакета (как сказано в комментариях mdsummer ). Вот код:
Используя эту функцию, вы теперь можете получить доступ к значениям растра в файле.
источник