1

別のディレクトリにあるファイルから入力を読み取り、その入力を処理し、出力を別の場所に書き込む plyr ベースのスクリプトを作成しています。多くの入力があるので、doMCd_plyで使用するのは理にかなっていますが、いくつかの plyr 関数が .parallel 引数を受け入れないことに驚きました!

plyr のドキュメントをざっと見てみると、出力を破棄する関数 ( a_ply 、 l_ply 、 d_ply など) が .parallel 引数を受け入れないことがわかります。

d_ply       Split data frame, apply function, and discard results.  
Usage
d_ply(.data, .variables, .fun = NULL, ..., .progress = "none", .print = FALSE)

私の質問:なぜこれが事実なのか誰か知っていますか?

以下に具体例を示します。plyr への私の呼び出しは次のようになります

d_ply(input_df, c("ImageFiles","ShapeFiles", "FociFiles"), merge_files, .parallel=TRUE)

ここで、input_dfは入力ファイル名を含む 3xN データ フレームです。

input_files[1:3,]
                 ImageFiles                     ShapeFiles
1         SQL_1_1_image.CSV         SQL_1_1_object.CSV.out
2 SQL_10002_10101_image.CSV SQL_10002_10101_object.CSV.out
3   SQL_1002_1101_image.CSV   SQL_1002_1101_object.CSV.out
                   FociFiles
1         SQL_1_1_object.CSV.out
2 SQL_10002_10101_object.CSV.out
3   SQL_1002_1101_object.CSV.out

関数merge_filesがinput_dfの各行に適用されます。3 タプルで指定された各ファイルを読み取り、各ファイルの内容を処理して、それらの内容を 1 つの出力データ フレームにマージし、別のディレクトリに書き込みます。

しかし、私がテストを試みたとき:

d_ply(input_files, c("ImageFiles","ShapeFiles", "FociFiles"), merge_files, .parallel=TRUE)

このエラーが発生しました:

Error in .fun(.data[[i]], ...) : unused argument(s) (.parallel = TRUE)

啓発的な回答をお寄せいただきありがとうございます。

4

1 に答える 1

0

現在、_plyファミリ関数はparallel引数を受け入れます。次のドキュメントからの抜粋を参照してくださいa_ply

配列を分割し、関数を適用し、結果を破棄します

説明

配列のスライスごとに、関数を適用し、結果を破棄します

使用法

a_ply(.data, .margins, .fun = NULL, ..., .expand = TRUE, .progress = "none", .inform = FALSE, .print = FALSE, .parallel = FALSE, .paropts = NULL) . ..

引数

.parallel TRUE の場合、foreach によって提供される並列バックエンドを使用して、関数を並列に適用します ...

于 2019-08-02T06:29:24.530 に答える