0
私は72バンドラスタを計算しようとしています。最初の36バンドの値(近赤外線バンド)が後者の36バンドの値(短波赤外線バンド)より大きい場合、0に割り当てます。そうでない場合は、次の機能に進みます。私はそれを書いている他の方法(基本的に同じロジック)を試してみて、同じエラーが表示されます。複数のバンドを同時に計算する方法Rラスタ?
raster_stack <- stack("NIR.bin", "SWIR.bin")
#ndii = NIR - SWIR/NIR+SWIR
fun <- function(x) {
x[is.na(x)] <- 0;
if (x[37:72] >= x[1:36]){
0} else {
ndii <- ((x[1:36]-x[37:72])/(x[1:36]+x[37:72]));
silent=TRUE;
return(ndii)
}
}
ndii <- calc(raster_stack, fun)
エラーメッセージは、常にこのいずれかです:(、Xアウト)setValuesで
エラー:これは私が書いた関数である値は数値でなければなりません、整数、論理 または因子
NA値を取り除くためにx[is.na(x)] <- 0
を追加しましたが、役に立たないようです。これを解決するための洞察?
私はあなたが機能をクリーンアップする必要があると思います。 'nd'とは何ですか? 'silent = TRUE'コマンドは' return(nd) '行の後に来るので決して実行されません。このリンク[最小限で完全で検証可能な例を作成する方法](http://stackoverflow.com/help/mcve) – steveb
をご覧になることをお勧めします。 「nd」は、この関数が計算しているndii値を示します。どんな洞察?私はループのために書こうとしましたが、どちらも役に立ちません。 –
@Yuyunあなたはバイナリファイルをこのようにスタックできますか? –