2016-01-05 104 views
1

我正在使用R“栅格”程序包并具有较大的栅格图层(62460098单元,12 MB用于该对象)。我的单元格值范围从-1到1.我必须用0替换所有负值(例如:值为-1的单元格必须变为0)。我试图做到这一点:R - 在大栅格图层中查找特定单元格值

raster[raster < 0] <- 0 

但它保持超载我的RAM因为光栅尺寸。

操作系统:Windows 7 64位

RAM容量:8GB

韩国社交协会!

回答

2

several postings that discuss memory issue s,目前还不清楚你是否尝试过这些,但你应该。物理约束不清楚,所以你应该编辑你的问题,包括机器的大小和被折磨的操作系统的名称。我不知道如何构建一个可以让我做任何测试的玩具箱,但是一种方法可能不会破坏RAM的使用(尽可能多),将首先构建一组标记位置的索引以“归零” :

idxs <- which(raster <0, arr.ind=TRUE) 
gc() # may not be necessary 

然后递增地替换一部分位置,例如一次四分之一或十分之一。

raster[ idxs[ 1:(nrow(idxs)/10), ] ] <- 0 

任何这样做的可能的问题是R的方式来更换不“到位”,而是涉及到的,然后将其重新分配给原来的对象的临时副本的创建。祝你好运。

+0

韩国社交协会,任务完成的光栅工作。对于问题提示,为了清楚说明机器和对象的约束,它已被编辑。 – IGr14

3

你可以做

r <- reclassify(raster, c(-Inf, 0, 0)) 

这将在任何尺寸(无内存限制)

相关问题