test.R
引数を取りarg1
、ファイルarg2
を出力するスクリプトがありarg1-arg2.csv
ます。
test.R を 6 つの並列セッション (私は 6 コア CPU を使用しています) でバックグラウンドで実行したいと思います。どうすればいいですか?
私はLinuxを使用しています
test.R
引数を取りarg1
、ファイルarg2
を出力するスクリプトがありarg1-arg2.csv
ます。
test.R を 6 つの並列セッション (私は 6 コア CPU を使用しています) でバックグラウンドで実行したいと思います。どうすればいいですか?
私はLinuxを使用しています
foreachパッケージにはdoParallelバックエンドを使用することをお勧めします。foreach パッケージは、ループを記述し、結果を結合するための適切な構文を提供します。doParallel は、R 2.14 以降に含まれている並列パッケージに接続します。他のセットアップ (古いバージョンの R、クラスターなど) では、foreach ループに触れることなく、バックエンドを簡単に変更できます。特に foreach パッケージはドキュメントが充実しているのでとても使いやすいです。
結果を個々のファイルに書き込む場合、foreach の結果結合機能はあまり役に立ちません。そのため、アプリケーションには並列を直接使用する方が適していると主張する人がいるかもしれません。個人的には、 foreach がループの概念を表現する方法の方がはるかに使いやすいと思います。
再現可能な例を提供しなかったので、作成しています。あなたが Linux を使用しているので、Rでスクリプトを作成する目的で書かれたlittlerにも切り替えています。
#!/usr/bin/env r
#
# a simple example to install one or more packages
if (is.null(argv) | length(argv) != 2) {
cat("Usage: myscript.r arg1 arg2\n")
q()
}
filename <- sprintf("%s-%s.csv", argv[1], argv[2])
Sys.sleep(60) # do some real work here instead
write.csv(matrix(rnorm(9), 3, 3), file=filename)
次に、ここで行っているようにコマンドラインから、または別の (シェル) スクリプトからこれを起動できます。キーは&
、バックグラウンドで送信するための最後にあります。
edd@max:/tmp/tempdir$ ../myscript.r a b &
[1] 19575
edd@max:/tmp/tempdir$ ../myscript.r c d &
[2] 19590
edd@max:/tmp/tempdir$ ../myscript.r e f &
[3] 19607
edd@max:/tmp/tempdir$
[$n]
は、プロセスがバックグラウンドでどのように起動されたかを示します。その後の数字は、監視または強制終了に使用できるプロセス ID です。しばらくすると、結果が得られます。
edd@max:/tmp/tempdir$
[1] Done ../myscript.r a b
[2]- Done ../myscript.r c d
[3]+ Done ../myscript.r e f
edd@max:/tmp/tempdir$ ls -ltr
total 12
-rw-rw-r-- 1 edd edd 192 Jun 24 09:39 a-b.csv
-rw-rw-r-- 1 edd edd 193 Jun 24 09:40 c-d.csv
-rw-rw-r-- 1 edd edd 193 Jun 24 09:40 e-f.csv
edd@max:/tmp/tempdir$
&
mfg
やbg
background などの詳細については、Unix シェルを参照してください。
最後に、これはすべて、 a) 引数の選択が少し異なりますが、b)コマンドライン引数の操作を容易にするRscript
CRAN パッケージのgetoptとoptparseを使用して実行できます。
最先端のツールは parallel パッケージを使用することですが、怠け者のときは、rscript を使用して 6 つのバッチ (Windows の場合は cmd) ファイルを開始するだけです。
コマンドファイルでパラメーターを設定できます
SET ARG1="myfile"
rscript rest.r
そしてそれを読む
Sys.getenv("ARG")
6 つのバッチ ファイルを使用して、複数の実行を 1 つのバッチに追加して、コアが常にビジーであることを確認することもできます。