我正在使用R" raster"打包并有一个大的栅格图层(62460098个单元格,对象为12 Mb)。我的单元格值范围从-1到1.我必须用0替换所有负值(例如:具有-1的单元格,因为值必须变为0)。我试着这样做:
raster[raster < 0] <- 0
但是由于栅格大小,它会使RAM过载。
操作系统:Windows 7 64位
RAM大小:8GB
韩国社交协会!
答案 0 :(得分:4)
你可以做到
r <- reclassify(raster, c(-Inf, 0, 0))
这适用于任何大小的栅格(无内存限制)
答案 1 :(得分:2)
有several postings that discuss memory issue并且不清楚你是否尝试过这些......,但你应该这样做。物理限制不明确,因此您应该编辑您的问题以包括机器的大小和被折磨的操作系统的名称。我不知道如何构建一个允许我进行任何测试的玩具箱,但是可能不会破坏RAM使用(尽可能多)的一种方法是首先构建一组标记位置的索引被“归零”:
idxs <- which(raster <0, arr.ind=TRUE)
gc() # may not be necessary
然后逐步替换部分位置,例如一次四分之一或十分之一。
raster[ idxs[ 1:(nrow(idxs)/10), ] ] <- 0
任何这种情况的可能问题在于R的替换方法不是“到位”,而是涉及创建对象的临时副本,然后将其重新分配给原始对象。祝你好运。