2014-10-17 25 views
0

我有三層柵格(1300×1400單元),我想使用來自所有3層的數據進行焦點計算。例如,其中一個圖層是土地覆蓋圖,我想只用於計算焦點窗口中與窗口中心像素具有相同地面覆蓋類型的這些像素。我想這對於光柵包中的「焦點」功能來說是不可能的,這就是爲什麼我試圖通過「getValuesFocal」從每個移動窗口範圍的3層中提取數據的原因。做完這個之後,我的想法是循環遍歷「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) 

我知道,像FF和包bigmemory允許用於處理大數據集,但我該如何使用他們時,我的數據集不能開始創建。我正在使用64位R並具有8GB RAM。有沒有辦法在文件中寫入「getValuesFocal」的結果?我會很感激任何幫助。

回答

0

您可以使用參數rownrows來讀取塊中的數據。例如

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)