Я пытаюсь извлечь подмножество данных глубины из набора глобальных данных батиметрии океана GEBCO, который представляет собой файл размером 10,9 ГБ .nc
, netcdf4
( прямая ссылка ).
Я открываю соединение с файлом, который не загружает его в память:
library(ncdf4)
GEBCO <- nc_open(filename = "GEBCO_2019.nc", verbose = T)
Нахожу индексы широты и долготы, соответствующие моей области подмножества:
LonIdx <- which(GEBCO$dim$lon$vals < -80 & GEBCO$dim$lon$vals > -81.7) #n=408 long
LatIdx <- which(GEBCO$dim$lat$vals < 26 & GEBCO$dim$lat$vals > 25) #n=240; 240*408=97920
Затем получаемДанные Z для этих экстентов:
z <- ncvar_get(GEBCO, GEBCO$var$elevation)[LonIdx, LatIdx]
В результате:
Error: cannot allocate vector of size 27.8gb
Однако это происходит независимо от размера подмножества, вплоть до матрицы 14 * 14. Поэтому я предполагаю, что ncvar_get()
извлекает всю базу данных для извлечения индексов ... хотя у меня сложилось впечатление, что весь смысл файлов netcdf
заключается в том, что вы можете извлечь с помощью матричного индексирования, не загружая все этов память?
FWIW Я на Linux-машине 32 ГБ, так что все равно должно работать? [править, и файл в первую очередь занимает 10,9 ГБ, поэтому можно подумать, что подмножество будет меньше]
Любые идеи / сведения / идеи с благодарностью принимаются. Заранее спасибо.
Редактировать: в других случаях происходит сбой RStudio вместо выдачи ошибки. R Сеанс прерван, фатальная ошибка, сеанс прерван. Использование оперативной памяти:
![netcdfRAMfail](https://i.stack.imgur.com/GndCq.png)