ホーム>source

Rの大きなラスタースタックの各レイヤーで一連の計算を実行し、後で使用するために、各レイヤーの結果を個別のラスターとして保存します。私はforeachとdoParallelを使用してプロセスを高速化しようとしています。以下は、スタック内の各レイヤーの簡単な計算(* 3)を含む基本的なコードです。

<前>ウィズウィズ

ほとんどは機能しますが、最初のN個のレイヤーは処理されません。ここで、Nはノードの数です(上記の例では2)。次のエラーが表示されます:{のエラー:タスク1が失敗しました-「このS4クラスはサブセット化できません」。ほとんどの場合、エラーは他のすべてのレイヤーが正しく処理された後にのみ発生します(つまり、最初のNレイヤーのみが機能せず、他のレイヤーの処理が停止することはありません。 %do%で連続して実行すると、すべてのレイヤーが正しく処理されます。
誰かがこの動作を説明したり、解決策を提供したりできますか?
ありがとう

library(raster) library(doParallel) RasterStack<- stack(system.file("external/rlogo.grd", package="raster")) RasterStack<-addLayer(RasterStack,RasterStack) cl <- makeCluster(2) registerDoParallel(cl) RasterStack<- stack(system.file("external/rlogo.grd", package="raster")) RasterStack<-addLayer(RasterStack,RasterStack) foreach(rasname=iter(names(RasterStack)),packages="raster") %dopar%{ ras<-RasterStack[[rasname]]*3 save(ras,file=paste0(rasname,"_new.Rras")) }
あなたの答え
  • 解決した方法 # 1

    . しかないようです   packages の前  行方不明。これは私にとってはうまくいきます:

    <前>ウィズウィズ

  • 解決した方法 # 2

    結果を個別のファイルではなく新しいスタックに入れる場合:

    <前>ウィズウィズ foreach(rasname = iter(names(RasterStack)), .packages = "raster") %dopar% { ras <- RasterStack[[rasname]] * 3 save(ras, file = paste0(rasname, "_new.Rras")) }

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ dataframe - Rベクトルコンテンツをデータフレームインデックスに追加