問題タブ [r-raster]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - Windows で最新のラスター パッケージがラスター オブジェクトをプロットしない
「raster」パッケージを使用してラスターをプロットしようとしていますが、エラーが発生します
これが私のコードです
ただし、次のバージョンの Linux マシンで実行すると: R バージョン 3.1.1 (2014-07-10) プラットフォーム: i686-pc-linux-gnu (32 ビット)、raster_2.2-31 sp_1.0 -15)
それは私に問題を与えません
r - R ラスター パッケージ: 「getValuesFocal」関数使用時のメモリ不足
3 つのレイヤーを持つラスター (1300 x 1400 セル) があり、3 つのレイヤーすべてのデータを使用して焦点計算を行いたいと考えています。たとえば、レイヤーの 1 つは土地被覆マップであり、ウィンドウの中央ピクセルと同じ土地被覆タイプを持つ焦点ウィンドウ内のこれらのピクセルのみを計算に使用したいと考えています。これは、ラスター パッケージの「focal」関数では不可能だと思われるため、「getValuesFocal」を使用して、移動するウィンドウの範囲ごとに 3 つのレイヤーからデータを抽出しようとしました。これを行った後、私の考えは、「getValuesFocal」から得られた配列の行をループすることでした。ただし、配列が非常に大きく、メモリに収まらないため、エラー メッセージが表示されます。
ff や bigmemory などのパッケージを使用すると大きなデータセットを処理できることはわかっていますが、データセットを最初に作成できない場合にそれらを使用するにはどうすればよいですか。私は 64 ビットの R を使用しており、8GB の RAM を搭載しています。「getValuesFocal」の結果をファイルに書き込む方法はありますか? どんな助けにも感謝します。
r - R リサンプル ラスターの動作に一貫性がない
エクステントと解像度が異なる 2 つの netCDF ファイルがあります。同じ範囲と解像度の両方のファイルからラスターを作成したいと考えています。1 つのファイルの解像度と、別のファイルの範囲が必要です。
私が使用しているコードは次のとおりです。
iceMaxNineK のリサンプリングは機能しますが、saltNineK のリサンプリングを行うと、下の図に示すように、範囲の定義された領域の 1 つの隅にマップが詰まってしまいます。
まず、iceMaxNineK:
次に、saltNineK:
リサンプリング前の iceMaxNineK の次元:
リサンプリング後の iceMaxNineK の次元:
リサンプリング前の saltNineK の次元:
リサンプリング後のsaltNineKの次元:
サンプル ファイルには、次のリンクからアクセスできます: https://www.dropbox.com/s/x8oqem317vmr7yq/DataForRResample.zip?dl=0
お時間をいただきありがとうございます。
r - `raster` パッケージを使用して 2 つのラスター画像を 1 つのプロットにマージする
マップの拡大部分を元のマップに追加し、元のマップと拡大/ズーム部分の両方を示す 1 つのマップを最終製品として作成したいと考えています。meuse
例としてデータセットを使用します。
raster
またはrasterVIS
パッケージに、拡大されたラスターの一部を元のマップに追加できるコマンドがあるかどうかはわかりません。機能を試してみましたpar
が、うまくいきません。どんな提案も歓迎します。
r - R でジオリファレンスを作成する
R を使用して、MODIS からの衛星データを分析しています (添付ファイル)。R を使用してファイルをジオリファレンスしたい.image/.tif
。これは私が使用したスクリプトです。
残念ながら、levelplot
世界地図を使用してプロットすると、間違った位置に表示されます。白い部分が陸地・島、黒い線がインドネシアの海岸線
r - raster::sampleRandom が非常に遅いです。回避策として何ができますか?
tl;dr: raster::sampleRandom に時間がかかるのはなぜですか? たとえば、30k セルから 3k セルを抽出する (10k タイムステップ以上)。状況を改善するために私にできることはありますか?
編集:下部の回避策。
大きなファイル (通常は 2 ~ 3 GB 以上) を読み取り、データに対して変位値計算を実行する必要がある R スクリプトを考えてみましょう。ラスター パッケージを使用して ( netCDF
) ファイルを読み取ります。私は 64 ビット GNU/Linux で R 3.1.2 を使用しています。RAM は 4GB で、ほとんどの場合 3.5GB が使用可能です。
多くの場合、ファイルは大きすぎてメモリに収まらないため (何らかの理由で 2GB のファイルでさえ、3GB の利用可能なメモリに収まりません:)unable to allocate vector of size 2GB
私は常にこれを行うことはできません。
sampleRaster()
しかし、代わりに、raster
パッケージの関数を使用してファイル内の少数のセルをサンプリングし、良好な統計を得ることができます。
例えば:
私はこれを 6 つの異なるファイル ( i
1 から 6 まで) に対して実行します。これらのファイルはすべて約 30k のセルと 10k のタイムステップ (つまり 300M の値) を持っています。ファイルは次のとおりです。
- 1.4GB、1変数、ファイルシステム1
- 2.7GB、2 つの変数、つまり、私が読み取った変数、ファイルシステム 2 に約 1.35GB
- 2.7GB、2 つの変数、つまり、私が読み取った変数、ファイルシステム 2 に約 1.35GB
- 2.7GB、2 つの変数、つまり、私が読み取った変数、ファイルシステム 2 に約 1.35GB
- 1.2GB、1変数、ファイルシステム3
- 1.2GB、1変数、ファイルシステム3
ご了承ください:
- ファイルは 3 つの異なる nfs ファイルシステムにあり、そのパフォーマンスはよくわかりません。nfs ファイルシステムのパフォーマンスが刻一刻と大きく変化する可能性があるという事実を排除することはできません。
- スクリプトの実行中、RAM の使用率は常に 100% ですが、システムはすべてのスワップを使用しているわけではありません。
sampleRandom(dataset, N)
1 つのレイヤー (= 1 タイムステップ) から N 個の非 NA ランダム セルを取得し、その内容を読み取ります。各層の同じ N 個のセルに対してそうします。Z をタイムステップとして、データセットを 3D マトリックスとして視覚化する場合、関数は N 個のランダムな非 NA 列を取ります。ただし、関数はすべてのレイヤーの NA が同じ位置にあることを認識していないため、選択した列に NA が含まれていないことを確認する必要があります。- 8393 個のセル (合計で約 340MB) を含むファイルに対して同じコマンドを使用し、すべてのセルを読み取る場合、計算時間は、30k セルを含むファイルから 1000 個のセルを読み取ろうとする場合の何分の一かです。
以下の出力を生成する完全なスクリプトは、コメントなどとともに ここにあります。
30k セルをすべて読み取ろうとすると、次のようになります。
cannot allocate vector of size 2.6 Gb
1000 個のセルを読み取った場合:
- 5分
- 45メートル
- 30メートル
- 30メートル
- 20メートル
- 20メートル
3000 個のセルを読み取った場合:
- 15分
- 18メートル
- 35メートル
- 34メートル
- 60メートル
- 60メートル
5000 個のセルを読み取ろうとすると、次のようになります。
- 2.5時間
- 22時間
- 2 人以上の場合、18 時間後に作業を中断しなければならず、ワークステーションを他のタスクに使用する必要がありました
より多くのテストで、分位点の計算ではなく、ほとんどの計算時間を取っているのは関数であることがわかりましたsampleRandom()
(これは、 などの他の分位点関数を使用して高速化できますkuantile()
)。
- なぜそんなに
sampleRandom()
時間がかかるのですか?なぜこれほど奇妙に、時には速く、時には非常に遅く動作するのでしょうか? - 最善の回避策は何ですか?
raster::extract
最初のレイヤーに N 個のランダム セルを手動で生成し、次にすべてのタイム ステップを手動で生成できると思います。
編集:回避策は次のとおりです。
すべてのレイヤーの NA が同じ位置にあるため、これは機能し、非常に高速です。これは実装できるオプションであるべきだと思いますsampleRandom()
。
r - 複数のスレッドを使用してラスター ブリックからデータを抽出する
ラスター ファイルからデータを抽出しています。次のように、1000 個のセルのランダム サンプルのみを抽出する必要があります。
次のように、より多くのコアを使用してプロセスを高速化したいと思います。
ただし、このclusterR()
行は次のようなあらゆる種類のエラーをスローしています。
prvals <- clusterR(pr, extract, args=list(cells[,1])) checkForRemoteErrors(lapply(cl, recvResult)) のエラー: 4 つのノードでエラーが発生しました。最初のエラー: 引数の長さがゼロです
prvals <- clusterR(pr, extract, args=list(cells[,1])) checkForRemoteErrors(lapply(cl, recvResult)) のエラー: 2 つのノードでエラーが発生しました。最初のエラー: 引数の長さがゼロです
prvals <- clusterR(pr, extract, args=list(cells[,1])) checkForRemoteErrors(lapply(cl, recvResult)) のエラー: 3 つのノードでエラーが発生しました。最初のエラー: 引数の長さがゼロです
prvals <- clusterR(pr, extract, args=list(cells[,1])) clusterR(pr, extract, args = list(cells[, 1])) のエラー: クラスター エラー さらに: 11 個の警告がありました ( warnings() を使用してそれらを表示します)
prvals <- clusterR(pr, extract, args=list(cells[,1])) checkForRemoteErrors(lapply(cl, recvResult)) のエラー: 3 つのノードでエラーが発生しました。最初のエラー: 引数の長さが 0 です さらに: 警告メッセージ: 未使用の接続を閉じます 9 (/tmp/R_raster_tmp/afantini/raster_tmp_2014-11-28_131043_31528.gri)
どうしたの?
編集:raster
ドキュメントの例を試してみましたが、別のマシンでは動作しますが、これでは動作しません。したがって、このマシンにはより深い問題があります。パッケージ snow が正しくインストールされています。R は最新バージョンです。