one way would be to enlarge your focus window. You can do so by modifying the "fill.NA" function to take a width
argument and computing the position of the center pixel on the fly:
fill.na <- function(x) {
center = 0.5 + (width*width/2)
if( is.na(x)[center] ) {
return( round(mean(x, na.rm=TRUE),0) )
} else {
return( round(x[center],0) )
}
}
then:
width = 9
r2 <- focal(r, w = matrix(1,width,width), fun = fill.na,
pad = TRUE, na.rm = FALSE)
summary(getValues(r2))
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
300.0 339.0 408.0 488.7 574.5 1806.0 4661
You can see that the number of NAs is going down.
However, be aware that since your "holes" share the same NA value of the area outside the raster, this will also expand your raster on the outer side, giving you bogus values. see for example:
width = 15
r2 <- focal(r, w = matrix(1,width,width), fun = fill.na,
pad = TRUE, na.rm = FALSE)
plot(rast)
Therefore, you'd have to find a way to distinguish between "true" NA values, and values outside the extent of the dataset.
HTH.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…