0

私は SDM クラスの非常に大きなデータ層を扱っています。このため、メモリの制限を避けるために、一部の層をブロックの束に分割することになりました。これらのブロックは .grd ファイルとして書き出されたので、今度はそれらを R に読み戻してマージする必要があります。私は R プログラミング全般に非常に慣れていないので、どんな助けもいただければ幸いです。私がこれまでに試したことは次のようになります。

merge.coarse=raster("coarseBlock1.grd")
for ("" in 2:nBlocks){
  merge.coarse=merge(merge.coarse,raster(paste("coarseBlock", ".grd", sep="")))
}

私のファイルはcoarseBlock.grdにあり、1からnBlocks(259)まで順番に番号が付けられています

フィードバックをいただければ幸いです。

4

2 に答える 2

1

ループを使用forすると、一般的に R で処理が遅くなります。また、ループ内で や などの関数を使用すると、mergeRがこれらの関数に値を渡す方法が原因で、大量のメモリが消費されます。 rbindfor

このタスクを実行するより効率的な方法は、ファイルを R にロードするために呼び出すことですlapply(詳細については、適用関数に関するこのチュートリアルをrbind参照してください)。これにより、関数を使用して折りたたむことができるリストが生成されます。

rasters <- lapply(list.files(GRDFolder), FUN = raster)
merge.coarse <- do.call(rbind, rasters)
于 2013-11-04T18:57:33.467 に答える
0

私は .grd ファイルにはあま​​り詳しくありませんが、この全体的なプロセスによって、少なくとも正しい方向に進むことができるはずです。すべての .grd ファイル (1 から 259) が同じフォルダー (ここでは GRDFolder と呼びます) に保存されていると仮定すると、次のように試すことができます。

merge.coarse <- raster("coarseBlock1.grd")
for(filename in list.files(GRDFolder))
{
  temp <- raster(filename)
  merge.coarse <- rbind(merge.coarse, temp)
}
于 2013-11-04T18:44:25.320 に答える