回答:
NA値は、foal関数を使用してna.rm引数をFALSEに設定し、パッドをTRUEに設定して入力できます。
library(raster)
r <- raster(matrix(1:16, nrow=8, ncol=8))
r[r==12] <- NA
NAの場合、焦点値を3x3ウィンドウの平均に置き換える関数。ウィンドウサイズが大きくなると、インデックス値[i]も変更する必要があります(たとえば、5x5ウィンドウの場合、インデックスは13になります)。
fill.na <- function(x, i=5) {
if( is.na(x)[i] ) {
return( round(mean(x, na.rm=TRUE),0) )
} else {
return( round(x[i],0) )
}
}
fill.na関数をraster :: focalに渡し、結果を確認します。pad引数は、NA値の仮想行/列を作成して、ラスターのエッジに沿ってベクトルの長さを一定に保ちます。これが、ベクトルの5番目の値が常に3x3ウィンドウの焦点値であると期待できる理由です。したがって、fill.na関数のインデックスi = 5です。
r2 <- focal(r, w = matrix(1,3,3), fun = fill.na,
pad = TRUE, na.rm = FALSE )
as.matrix(r)
as.matrix(r2)