Raster::focal 函数用 NA 值替换边缘单元格
Raster::focal function replaces edge cells with NA values
我正在尝试使用 raster::focal 来找出每个栅格像元有多少个值为 1 的邻居。但是,我注意到在生成的栅格中,边缘单元已被 NA 值替换。如何获取栅格外边缘的邻居数?
这是一个可重现的例子:
#create raster and add 1's and 0's
land <- raster(matrix(0, 8, 10), xmn=408027.5, xmx=413027.5, ymn=4370000,
ymx=4374000)
land[4:8, 2:5] <- 1
land[2:3, 8:9] <- 1
land[1,0:10] <- 1
land[is.na(land[])] <- 0
#plot the raster
plot(land)
#create window for focal function
w <- matrix(1,3,3)
#run raster::focal
land.foc <- focal(land, w=w, fun=sum)
#plot resulting focal raster
plot(land.foc)
#plot NA values in land.foc
plot(is.na(land.foc))
但是,正如您在比较两个栅格时所看到的,焦点栅格中最外层的像元已被 NA 替换。
你只需要设置pad=TRUE
和padValue=0
。这个 'extends' 您的光栅并添加虚拟行和列 padValue
,在本例中为 0.
land.foc <- focal(land, w=w, fun=sum,pad=T,padValue=0)
plot(land.foc)
plot(is.na(land.foc))
编辑:
另一种看待它的方式是虚拟单元格没有 任何 值,它们是 NA
.
因此,不要将 0
分配为 padValue
,只需将 na.rm=TRUE
添加到您的呼叫中即可。
如果您确实需要对虚拟单元格执行其他操作,您可以创建自己的函数来更具体地处理 NA 单元格,然后将其传递给焦点。
我正在尝试使用 raster::focal 来找出每个栅格像元有多少个值为 1 的邻居。但是,我注意到在生成的栅格中,边缘单元已被 NA 值替换。如何获取栅格外边缘的邻居数?
这是一个可重现的例子:
#create raster and add 1's and 0's
land <- raster(matrix(0, 8, 10), xmn=408027.5, xmx=413027.5, ymn=4370000,
ymx=4374000)
land[4:8, 2:5] <- 1
land[2:3, 8:9] <- 1
land[1,0:10] <- 1
land[is.na(land[])] <- 0
#plot the raster
plot(land)
#create window for focal function
w <- matrix(1,3,3)
#run raster::focal
land.foc <- focal(land, w=w, fun=sum)
#plot resulting focal raster
plot(land.foc)
#plot NA values in land.foc
plot(is.na(land.foc))
但是,正如您在比较两个栅格时所看到的,焦点栅格中最外层的像元已被 NA 替换。
你只需要设置pad=TRUE
和padValue=0
。这个 'extends' 您的光栅并添加虚拟行和列 padValue
,在本例中为 0.
land.foc <- focal(land, w=w, fun=sum,pad=T,padValue=0)
plot(land.foc)
plot(is.na(land.foc))
编辑:
另一种看待它的方式是虚拟单元格没有 任何 值,它们是 NA
.
因此,不要将 0
分配为 padValue
,只需将 na.rm=TRUE
添加到您的呼叫中即可。
如果您确实需要对虚拟单元格执行其他操作,您可以创建自己的函数来更具体地处理 NA 单元格,然后将其传递给焦点。