我有一个很大的RasterStack (114个geotiff图像),我已经成功地对其进行了地理处理(屏蔽等)。在R中,但是我很难让它对每个栅格应用一个简单的条件语句(所有栅格层都是相同的范围,分辨率,并且是共同注册的)。我希望将所有小于每个栅格最大值的95%的像素值设置为NA。例如,如果图层的最大值为85,则像素值< 80.75 = NA。下面是我的代码:
#Get max value from each raster layer
r_max <- maxValue(rstack)
#Set all values < 95% of max to NA
rstack[rstack < (r_max * 0.95)] = NA
当我在整个栅格堆栈上运行这段代码时,我得到"Error in valuej,:Error number of dimensions“。但是,如果我在一个较小的集合(14个左右)上运行它,它完全可以正常工作。因为我已经成功地执行了许多类似的操作(其他条件语句、掩码等)在没有错误的整个堆栈上,我不确定它为什么现在抛出这个错误。有什么想法吗?
如果之前已经讨论过这个问题,我很抱歉,但我找不到这样的帖子。如果它确实存在,请指给我那个方向。
谢谢
发布于 2020-03-26 04:06:41
请始终包含一个可重现的最小示例,如下所示:
library(raster)
s <- stack(system.file("external/rlogo.grd", package="raster"))
cutoff <- maxValue(s) * .95
cutoff
#[1] 242.25 242.25 242.25
现在你可以做
s[s < cutoff] = NA
s
#class : RasterBrick
#dimensions : 77, 101, 7777, 3 (nrow, ncol, ncell, nlayers)
#resolution : 1, 1 (x, y)
#extent : 0, 101, 0, 77 (xmin, xmax, ymin, ymax)
#crs : +proj=merc +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
#source : memory
#names : red, green, blue
#min values : 243, 243, 243
#max values : 255, 255, 255
但是,当RasterStack很大(并且需要写入文件)时,会出现一个bug -这就是您偶然发现的。我们可以用rasterOptions(todisk=TRUE)
来模拟这种情况
rasterOptions(todisk=TRUE)
s[s < cutoff] = NA
#Error in value[j, ] : incorrect number of dimensions
我会试着解决这个问题。以下是解决方法
s <- stack(system.file("external/rlogo.grd", package="raster"))
cutoff <- maxValue(s) * .95
x <- sapply(1:nlayers(s), function(i) reclassify(s[[i]], cbind(-Inf, cutoff[i], NA)))
x <- stack(x)
https://stackoverflow.com/questions/60855190
复制相似问题