доступ к большому набору данных из файла NetCDF4 с помощью R - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь использовать данные из этого файла (MOD13.A2010.unaccum.nc4) в проекте. Я установил и загрузил библиотеки ncdf4, raster, ggplot2 и viridis. Я успешно открываю файл, используя:

mcd_file <- nc_open("C:\\Program Files\\RStudio\\R\\MCD13.A2010.unaccum.nc4")

и могу получить доступ к атрибутам mcd_file, выделив mcd_file и нажав кнопку RUN и используя:

vars <- names(my_file$var)
print(vars)

Это указывает на то, что mcd_file имеет 5 переменных где time_bnds - вторая переменная, а набор данных NDVI - третья переменная.

Я могу получить правильную информацию о переменной time_bns, используя это:

time.layers < ncvar_get(mcd_file, "time_bnds")

, но когда я пытаюсь это сделать:

NDVI <- ncvar_get(mcd_file, "NDVI")

, я получаю сообщение об ошибке, которое гласит:

Ошибка: невозможно выделить вектор размером 49,5 Гб

Я посмотрел значение сообщения об ошибке, и это означает, что у меня недостаточно ОЗУ для хранения вся информация в NDVI, но тогда я не знаю никого с более чем 49,5 ГБ ОЗУ. Тем не менее, люди анализируют этот файл, используя R, поэтому информация в NDVI должна быть как-то доступна с помощью R.

Я знаю, что растровые объекты из растровой библиотеки могут использоваться для доступа к данным в файлах, которые слишком велики для размещения в ОЗУ. Но я не могу понять, как извлечь информацию в NDVI из исходного файла, чтобы я мог записать ее в файл без другой информации в исходном файле, чтобы я мог использовать растровые объекты для доступа к нему. Это:

write.csv(my_file$NDVI, file = "NDVI.csv")

создает файл с именем NDVI, но он пуст.

Это:

write.csv(as.raster(ncvar_get(my_file, "NDVI")),file = "NDVI2010.csv")

генерирует это сообщение об ошибке:

Ошибка: невозможно выделить вектор размером 49,5 Гб

Может кто-нибудь мне помочь?

1 Ответ

1 голос
/ 08 марта 2020

Решено.

Не нужно go через базу R. Просто дайте растровому пакету сделать волшебный c.

>f <- "C:\\Program Files\\RStudio\\R\\MCD13.A2010.unaccum.nc4"
>b <- brick(f)  

Растровая программа открывает указанный файл и получает доступ к набору данных в нем, но оставляет данные на диске, выводя нужные данные порциями, когда Необходимый.

При построении растрового слоя используется похожий синтаксис:

>x <- desiredBandToPlot
>r <- raster(f, band = x)
>plot(r)

Поскольку каждый слой имеет 28 000 000 пикселей данных для построения, моему компьютеру (с процессором AMD A8) потребовалось около 5 минут для график должен быть (сжат и затем) отображен, но это работает.

...