1

R ラスター パッケージの focus() 関数を扱う次のタスクを手伝ってくれる人がいるかどうか疑問に思っていました。

デフォルトでは、focal() 関数は、指定されたラスター (以下、「背景」ラスター) の各セルを実行し、ユーザー定義の移動ウィンドウで定義されたように、指定された関数を隣接する値に適用します。大規模なラスター/調査エリアでの計算を最適化して高速化するために、「背景」ラスターに「移動」によってカバーされる範囲内にいくつかの値 (たとえば、ゼロより大きい) がある場合にのみ、この関数 (フィルター) を適用したいと思います。 window' を選択し、他のすべてのフォーカス セルをスキップします。このようにして、フィルターは必要のない焦点値の計算に時間を費やすことはありません。

再現可能な小さな例とインラインコメントの下:

library(raster)

x <- matrix(1:25, ncol=5)
x[c(1,2,3,6,7,8,11,12,13)] <- 0
r <- raster(x)

#Apply filter to focal cells and return values using a 3x3 moving window...ONLY IF 
#ALL values found within the window are > 0. Skip focal cell otherwise.

r3 <- focal(r, w=matrix(1/9,nrow=3,ncol=3), FUN=sum)

望ましい結果を得るには、この関数をどのように変更すればよいですか?

4

2 に答える 2

1

Windows スライドは、すべての焦点ピクセル位置で動作します。場所のスキップ/ジャンプはできません。ただし、以下のように、すべての要素/行列セルがしきい値条件を満たすかどうかを確認できます。

myfunc = function (x){
  if(all(x > threshold)){
    print(x)
    x = sum(x)
  }else{
    x = 0}
}
r3 <- focal(x=r>1, w=matrix(1/9,nrow=3,ncol=3), fun=sum)
于 2017-01-02T11:59:22.213 に答える