2017-07-25 126 views
0

我有兩個大的光柵圖像(30,000 x 30,000),2000年的另一個用於2005年。我想用2000光柵中NA的像素替換它們各自的2005 NA光柵中的非NA值。這裏是一個例子:如何用R中另一個柵格的值替換大柵格中的NA?

r1 <- raster(ncols=36, nrows=18) 
r1[] <- 1:ncell(r1) 
plot(r1) 
r2 <- raster(ncols=36, nrows=18) 
r2[] <- 1:ncell(r2) 
r2[r2<300] <- NA 
plot(r2) 

在這個例子中,我想用它們在「r1」中的值代替「r2」中的NA。我試着命令「封面()」中的R,但一個不完整的「R2」,而是返回在「R2」失蹤的信息,但目前在「R1」:

r2.fix <- cover(r2, r1) 
plot(r2.fix) 

任何想法上工作如何完成?先謝謝你。

UPDATE:這個解決方案的問題:

r2[is.na(r2)] <- r1[is.na(r2)] 

是它不會有大柵格工作。 R返回以下錯誤:

Error: cannot allocate vector of size 2.6 Gb 
In addition: Warning messages: 
1: In order(cells[, 2]) : 
    Reached total allocation of 16080Mb: see help(memory.size) 
+0

如果你的柵格太大,看看這個[指南](https://cran.r-project.org/web/packages/raster/vignettes/functions.pdf)上編寫大型柵格函數,尤其是塊式處理 – Val

回答

1

我只能用大光柵重現您的問題。
我有錯誤:無法分配矢量大小爲6.7 Gb與16 GB RAM。
您需要在會話選項中更改塊大小

From Introduction to the ’raster’ package

The options chunksize and maxmemory determine the maximum size (in number of cells) of a single chunk of values that is read/written in chunk-by-chunk processing of very large files.

+0

謝謝Arkaiy,您的方法可以用於小型柵格,但是大型解決方案會遇到內存問題。這是我得到的:錯誤:無法分配矢量大小2.6 Gb 另外:警告消息: 1:按順序(單元格[,2]): 已達到總分配16080Mb:請參閱help(memory.size) –

+0

您需要更改會話選項中的塊大小。 –

相關問題