Как устранить ошибку: не удается выделить вектор размером 70,7 Гб в RStudio? - PullRequest
1 голос
/ 21 октября 2019

Мне нужно конвертировать файл .nc (размер 35 ГБ) в .csv. Отображается сообщение об ошибке: невозможно выделить вектор размером 70,7 ГБ

Как устранить эту ошибку?

Я успешно преобразовал файлы .nc (размер 4 КБ) в файлы .csv с помощьютот же код, который я использую для преобразования больших файлов.

Я пытался очистить память с помощью команды gc () перед командой nc.df .... Также я попытался увеличить лимит памяти, как показано ниже.

              > memory.limit()
              [1] 16306

              > memory.limit(size = 120000)
              [1] 120000

Код выглядит следующим образом:

   > rm(list = ls())
   > library(raster)
   > nc.brick <- brick(file.choose())
   > nc.df <- as.data.frame(nc.brick, xy=T)
   > write.csv(nc.df, file.choose())

Ожидаемый результат - получить файл .csv с использованием приведенного выше кода. Однако в настоящее время после второй последней команды (т.е. nc.df <- as.data.frame (nc.brick, xy = T) она выдает указанную ошибку, т. Е. Ошибка: не удается выделить вектор размером 70,7 Гб. </p>

> sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200) 

Matrix products: default 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C 
[5] LC_TIME=English_United States.

1252 attached base packages: 
[1] stats graphics grDevices utils datasets methods base 

other attached packages: 
[1] raster_2.5-8 sp_1.2-4 RevoUtilsMath_10.0.0 

loaded via a namespace (and not attached): 
[1] compiler_3.4.0 RevoUtils_10.0.4 rgdal_1.2-7 tools_3.4.0 Rcpp_0.12.10 ncdf4_1.16
[7] grid_3.4.0 lattice_0.20-35

Я попробовал библиотеку ff, но она снова выдает ту же ошибку.

            > rm(list = ls())
            > library(ff)
            > nc.brick <- brick(file.choose())
            > nc.df <- as.data.frame(nc.brick, xy=T) 

1 Ответ

0 голосов
/ 21 октября 2019

Просмотр ?raster::as.data.frame:

Если для загрузки всех значений недостаточно памяти, вы можете использовать getValues ​​или getValuesBlock для чтения фрагментов файла. Вы также можете сначала использовать sampleRegular

. Вы можете использовать getValues или getValuesBlock в цикле для обработки вашего файла кусками (используя append = TRUE в write.csv).

Вы также можете уменьшить свой растр с помощью sampleRegular, чтобы сделать его меньше. Только вы можете решить, подходит ли пониженная выборка в вашем случае.

...