Растровый пакет R: нехватка памяти при использовании функции «getValuesFocal»

У меня есть растр (1300 на 1400 ячеек) с 3 слоями, и я хотел бы сделать фокусные расчеты, используя данные всех 3 слоев. Например, одним из слоев является карта земного покрова, и я хотел бы использовать в расчетах только те пиксели в фокальном окне, которые имеют тот же тип земного покрова, что и центральный пиксель окна. Я предполагаю, что это невозможно с функцией «focal» в растровом пакете, поэтому я попытался извлечь данные из 3 слоев для каждого экстента движущегося окна с помощью «getValuesFocal». После этого моя идея заключалась в том, чтобы перебрать строки массива, полученные в результате «getValuesFocal». Однако массив очень большой и не помещается в память, поэтому я получаю сообщение об ошибке:

dataraster <- stack(classification, layer2, layer3)
data <- getValuesFocal(dataraster, ngb=11, names=TRUE, padValue=NA, array=TRUE)
Error: cannot allocate vector of size 1.7 Gb
In addition: Warning messages:
1: In `rownames<-`(`*tmp*`, value = 1:1879200) :
  Reached total allocation of 8008Mb: see help(memory.size)

Я знаю, что такие пакеты, как ff и bigmemory, позволяют обрабатывать большие наборы данных, но как я могу их использовать, если мой набор данных не может быть изначально создан. Я использую 64-битную R и имею 8 ГБ ОЗУ. Есть ли способ записать результат «getValuesFocal» в файл? Буду признателен за любую помощь.


person Rupal    schedule 17.10.2014    source источник


Ответы (1)


Вы можете читать данные порциями, используя аргументы row и nrows. Например

library(raster)
r <- raster(nr=5, nc=5, crs='+proj=utm +zone=12')
r[] <- 1:25
as.matrix(r)
getValuesFocal(r, row=1, nrows=2, ngb=3, names=TRUE)
person Robert Hijmans    schedule 16.05.2015