我提前为这个问题的基本性质道歉,但我对于掩码()函数在R中的栅格包中是如何工作感到困惑。
如果这些单元格与掩码对象中的掩码值匹配(默认掩码值为NA),则读取它听起来像栅格x中的单元格的函数的文档将设置为NA(默认值)。但是,Lovelace等人在书中 Geocomputation with R 中对mask()函数的描述。 (https://geocompr.robinlovelace.net/spatial-operations.html#spatial-ras)(第4.3.1节)使得声音如果光栅x中的单元格与面具对象中的掩模值匹配则为KEPT,如果它们不相同则设置为NA。他们举了这个例子:
mask(elev, rmask, maskvalue = TRUE)
"we only want to keep those values of elev which are TRUE in rmask"
因此我的困惑。如果有人能澄清哪种解释是正确的,我将不胜感激。
我想知道的原因是我想要使用包含数据质量代码的同一MODIS产品中的栅格屏蔽包含百分比树覆盖的MODIS数据的栅格。我只想在"树盖"中保留这些值。光栅质量很好"质量和质量的质量代码"光栅。澄清mask()函数的工作原理将帮助我确定是否需要使用代码[1]或代码[2]来实现我想要的东西:
[1]
good <- c(0,1,2,3,4,5...etc.) # The codes in the quality raster that represent good quality data
tree_cover_masked <- mask(tree_cover, quality, maskvalue = good, inverse = TRUE)
# i.e. set cells in tree_cover to NA if they match any value OTHER THAN the "good" values in the quality raster.
# This is the code I would use based on my interpretation of the function documentation.
[2]
tree_cover_masked <- mask(tree_cover, quality, maskvalue = good)
# i.e. keep values in tree_cover that match "good" values in the quality raster, and set all others to NA
# This is the code I would use based on my interpretation of Lovelace et al.
如果这个问题非常简单,请再次道歉,但我很感激你的帮助!
答案 0 :(得分:1)
是什么阻止你做一个小例子并测试哪种方法有效?在您的情况下,[1]和[2]都不起作用,因为maskvalue是单个值(如果提供更长的向量,则为第一个值)。您可能想先使用重新分类
示例数据
library(raster)
qual <- trees <- raster(nrow=4, ncol=4, xmn=0, xmx=1, ymn=0, ymx=1, crs='+proj=utm +zone=1')
values(trees) <- rep(1:4, 4)
values(qual) <- rep(1:8, 2)
创建一个具有良好(4 - 8)和坏(1 - 8)值的RasterLayer,然后使用mask
good <- reclassify(qual, rbind(c(0, 4, NA), c(4, 9, 1)))
# this would also work
# good <- reclassify(qual, cbind(0, 4, NA))
x <- mask(trees, good)
或者:
good <- subs(qual, data.frame(from=c(5,6,7,8,9), 1))
x <- mask(trees, good)