Я пытаюсь извлечь подмножество данных о глубине из глобального набора данных батиметрии океана GEBCO, который представляет собой .nc
файл размером 10,9 ГБ, 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 Сеанс прерван, фатальная ошибка, сеанс завершен. Использование оперативной памяти было: