2014-10-17 3 views
0

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

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

ответ

0

Вы можете прочитать данные в чанках, используя аргументы и 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) 
Смежные вопросы