Работают ли растровые функции R, возвращающие новые растры, на диске? - PullRequest
0 голосов
/ 23 января 2019
Растровый функционал

R обеспечивает удобный дескриптор растрового диска с отображением в памяти, позволяя манипулировать очень большими наборами данных. Функция aggregate и другие функции в пакете принимают входной растр и создают новый растр меньшего разрешения. Живет ли новый возвращенный растр в памяти или на нем создается временная копия на диске с новым отображением памяти?

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Это зависит от размера растра и объема оперативной памяти, которую имеет компьютер. Небольшие наборы данных хранятся в памяти, большие наборы данных хранятся на диске.

Решение о том, является ли x маленьким или большим, делается с помощью canProcessInMemory с использованием "rasterOptions", maxmemory и memfrac

library(raster)
x <- raster(res=1/12)
values(x) <- 1

rasterOptions()
#maxmemory     : 1e+09 
#memfrac       : 0.6 

canProcessInMemory(x, verbose=TRUE) 
#memory stats in GB
#mem available: 50.07
#        60%  : 30.04
#mem needed   : 0.28
#max allowed  : 0.93  (if available)

#[1] TRUE

В приведенном выше примере доступно 50 ГБ ОЗУ. Максимальная доля, которая может быть использована, в 0,6 раза больше доступной оперативной памяти (0.6*50=30 GB) или maxmemoy, в зависимости от того, что меньше. maxmemory выражается в байтах, то есть 1e+09 / 1073741824 = 0.93 GB.

Чтобы избежать записи данных на диск (что замедляет процесс), вы можете установить maxmemory на большее число или даже Inf.

rasterOptions(maxmemory=Inf)

Значение по умолчанию для maxmemory увеличится в будущих версиях.

В версии 2.8 (в разработке) есть третий критерий. Если число ячеек растра * больше, чем (2 ^ 31 - 1; наибольшее целое число в R), canProcessInMemory возвращает FALSE.

Чтобы определить, использует ли объект Raster * x файл, вы можете сделать

filename(x)
#[1] ""

Если is возвращает пустую строку, файла нет. Вы можете принудительно записать в файл с помощью опции todisk (предназначенной только для тестирования)

y <- x * 1
filename(y)
#[1] ""

rasterOptions(todisk=TRUE)
y <- x * 1
filename(y)
#"/temp/RtmpQN2nYn/raster/r_tmp_2019-01-27_120723_22156_26708.grd"

Если вам нужен файл, лучше использовать аргумент filename, который есть у большинства методов.

Временные файлы удаляются по окончании сеанса (если вы не используете rasterOptions, чтобы установить временную папку в другом месте (не рекомендуется))

0 голосов
/ 27 января 2019

Я считаю, что вновь созданные объекты хранятся во временных копиях на диске, но их можно «принудительно» перенести в память с помощью raster::readALL.

См. https://stackoverflow.com/a/54314986/3362993

...