私の論文では、多くのシミュレーション研究を行う必要があり、どれもかなり時間がかかります。私のコンピュータには 4 つのコアがあるので、たとえば 2 つの R スクリプトを Rstudio で同時に実行し、2 つの異なるコアを使用できるようにすることはできないかと考えています。これが可能であれば、コンピュータを一晩中放置してこれらのスクリプトをすべて実行するだけで、多くの時間を節約できます。
ベストアンサー1
RStudioで
RStudio を右クリックすると、RStudio の複数の個別の「セッション」を開くことができます (プロジェクトを使用するかどうかに関係なく)。デフォルトでは、それぞれ 1 つのコアを使用します。
アップデート(2018年7月):RStudio v1.2.830-1は、プレビューリリース「ジョブ」ペインをサポートします。これは、対話型 R セッションとは別に、バックグラウンドで R スクリプトを実行するためのものです。
- クリーンなRセッションで任意のRスクリプトをバックグラウンドジョブとして実行する
- 進行状況を監視し、スクリプトの出力をリアルタイムで確認する
- オプションで、ジョブの開始時にグローバル環境を指定し、完了時に値をエクスポートします。
この機能は、RStudio バージョン 1.2 (またはそれ以降) のリリースで利用できます。
ターミナルでスクリプトを実行する
エラーなしで実行されることが分かっているスクリプトが複数ある場合は、コマンドラインから異なるパラメータでこれらを実行することをお勧めします。
RCMD script.R
RScript script.R
R --vanilla < script.R
バックグラウンドで実行中:
nohup Rscript script.R &
ここで、「&」はスクリプトをバックグラウンドで実行し( で取得fg
、 で監視htop
、 または で終了kill <pid>
できますpkill rsession
)、nohup
出力をファイルに保存し、ターミナルが閉じられても実行を継続します。
スクリプトに引数を渡す:
Rscript script.R 1 2 3
c('1', '2', '3')
これは出力として R に渡されるためcommandArgs()
、bash のループは bash ループを使用して Rscript の複数のインスタンスを実行できます。
for ii in 1 2 3
do
nohup Rscript script.R $ii &
done
R内で並列コードを実行する
R スクリプトの特定のステップが計算を遅くしていることに気付くことがよくあります。R コード内で並列コードを実行することをお勧めします。並列コードを別々に実行するのではなく、R コード内で並列に実行することをお勧めします。R でループを並列に実行するには、[snow パッケージ][1] をお勧めします。一般的に、代わりに以下を使用します。
cl <- makeCluster(n)
# n = number of cores (I'd recommend one less than machine capacity)
clusterExport(cl, list=ls()) #export input data to all cores
output_list <- parLapply(cl, input_list, function(x) ... )
stopCluster() # close cluster when complete (particularly on shared machines)
lapply
Rで関数を並列実行するために通常使用する場所ならどこでもこれを使用します。[1]:https://www.r-bloggers.com/quick-guide-to-parallel-r-with-snow/