HOWTO · R
コマンドラインから R スクリプトを実行する方法
Rscript を使ってターミナルやコマンドプロンプトから R スクリプトを実行し、引数を渡す方法、cron で定期実行する方法、Git で変更を管理する方法を紹介します。
このページの内容
ターミナルまたはコマンドプロンプトから R スクリプトを実行するには、コードをファイルに保存し、Rscript path/to/script.R のように呼び出します。R をインストールし、シェルから PATH 経由で Rscript を見つけられる必要があります。見つからない場合は、実行ファイルのインストール先をフルパスで指定してください。この方法は、分析を繰り返し実行する場合や、入力を受け取るスクリプト、定期実行するジョブに便利です。
Rscript とは
Rscript は、スクリプトまたは直接渡したコマンドから R コードを実行するためのコマンドラインプログラムです。対話を必要としない処理に向いており、指示をファイルまたはコマンドで渡すと、処理が終わった時点でプロセスも終了します。一方、対話型の R セッションでは、コマンドを入力しながら結果を確認できます。
Rscript は R のインストールに含まれています。macOS または Linux ではターミナルを、Windows ではコマンドプロンプトまたは PowerShell を開き、Rscript --version でコマンドを利用できるか確認してください。シェルがコマンドを見つけられない場合は、R をインストールするか、R と一緒にインストールされた実行ファイルの場所を確認してフルパスで指定します。インストール先は OS やインストール方法によって異なるため、別のコンピューターで使われているバージョン固有のパスに頼らないようにしましょう。
Rscript を使って R スクリプトを実行する
次の簡単な例を mean.R というファイルに保存します。コマンドラインから数値が渡された場合はその数値を使い、渡されなければ組み込みの数値セットを使うため、例のまま実行することも、別の値に合わせて変更することもできます。
args <- commandArgs(trailingOnly = TRUE)
numbers <- if (length(args) > 0) as.numeric(args) else c(1, 2, 3, 4, 5)
cat("Mean: ", mean(numbers), "\n", sep = "")
既定の入力では、コードは 1 から 5 までの数値を使います。コードを確認すると、Mean: 3 と出力されることが想定されます。この例は実行環境で検証されていません。出力ラベルの Mean はコード内の文字列のため、変更されず英語のまま表示されます。
ファイルがあるディレクトリから Rscript mean.R を実行します。別のディレクトリから実行するには、Rscript /path/to/mean.R のようにスクリプトのパスを指定してください。Windows では、たとえば Rscript "C:/Users/Ada/My Scripts/mean.R" のように、空白を含むパスを引用符で囲みます。開いているシェルが受け付けるパス形式を使ってください。Rscript が PATH にない場合は、実行ファイルをフルパスで指定し、スクリプトのパスは別の引数として渡します。
ファイルに保存する必要のない短い式には、POSIX 系シェルまたは PowerShell で -e オプションを使えます。例: Rscript -e 'mean(iris$Sepal.Length)'。この単引用符を使う形式は Windows のコマンドプロンプトでは使えません。コマンドプロンプトでは単引用符が文字として扱われるため、上の保存済みスクリプトの例を使ってください。iris データセットは標準的な R インストールで利用できます。--help と --version は、それぞれコマンドのヘルプとバージョン情報を表示するオプションです。--verbose は、より詳細なコマンド出力を求めます。呼び出し方法の確認や実行時の問題の調査に役立ちます。-e はハイフン 1 つで始まるため、すべてのオプションがハイフン 2 つで始まるわけではありません。
R スクリプトに引数を渡す
スクリプトでは、ファイル名の後に渡された値を commandArgs(trailingOnly = TRUE) で読み取れます。上の例では、渡された各引数を数値に変換して平均を計算します。たとえば Rscript mean.R 10 20 30 は、3 つの値を個別に渡します。入力値自体に空白が含まれる場合は、シェルでその値を引用符で囲み、1 つの引数として渡してください。スクリプトが想定する入力形式を明確にし、数値以外のデータを扱うときは変換方法と入力チェックを合わせて調整しましょう。
cron ジョブで R スクリプトを定期実行する
Unix 系システムでは、cron を使ってスクリプトを定期実行できます。crontab -e でユーザーの crontab を編集し、たとえば 0 2 * * * /usr/bin/Rscript /path/to/report.R を追加すると、そのマシンの cron 設定に従って毎日午前 2 時に実行するよう指定できます。実行ファイルとスクリプトのパスは例です。ジョブを実行するコンピューター上のパスに置き換えてください。
定期実行ジョブは、対話型シェルとは異なる作業ディレクトリや環境で起動することがあります。実行ファイル、スクリプト、入力ファイル、出力ファイルには絶対パスを使い、実行状況を調べる必要がある場合に備えて、ジョブの出力やエラーを記録する方法も用意してください。cron は Unix 系システム向けのスケジュール管理方法です。Windows では、システムのタスクスケジューラを使えます。
Git で R のバージョン管理を行う
Git を使うと、R スクリプトや関連するプロジェクトファイルの変更を記録できるため、編集内容の確認や以前のバージョンへの復元がしやすくなります。ただし、Git は任意のツールであり、Rscript でスクリプトを実行するために必要なものではありません。プロジェクトディレクトリで git init を実行してリポジトリを作成し、記録するファイルを git add で追加してから、git commit でスナップショットを保存します。コミットする内容を確認し、生成データや認証情報はプロジェクトの履歴に含める必要がない限り追加しないでください。
まとめ
コードを R ファイルに保存し、Rscript にスクリプトのパスを渡して実行します。R がインストールされ、シェルから実行ファイルを利用できることを確認し、必要に応じてパスを引用符で囲み、入力値はファイル名の後に渡してください。繰り返し実行する場合は、その実行環境に合ったパスを使ってスケジューラーを設定します。スクリプトの変更を記録したい場合は Git を利用できます。
よくある質問
-
R と Rscript はどのようにインストールしますか?
お使いの OS 向けのインストール手順に従って R をインストールしてください。この方法ではRscriptも R に含まれているため、別途インストールする必要はありません。 -
Windows で R スクリプトを実行できますか?
はい。実行ファイルがPATHにあれば、コマンドプロンプトまたは PowerShell でRscript script.Rを実行します。利用できない場合は、インストールされた実行ファイルをフルパスで指定してください。空白を含むパスは、使用するシェルの引用符のルールに従って囲みます。 -
Rscript と R の違いは何ですか?
Rscriptは、コマンドラインからスクリプトまたは式を実行するためのものです。Rコマンドは通常、作業しながらコマンドを入力し、結果を確認できる対話型セッションを起動します。 -
インストール済みの Rscript のバージョンはどう確認しますか?
ターミナルまたはコマンドプロンプトでRscript --versionを実行します。コマンドがPATHにない場合は、フルパスで呼び出してください。 -
複数の R スクリプトを順番に実行するにはどうしますか?
Unix 系シェルでは、Rscript first.R && Rscript second.Rのように&&でコマンドをつなぎます。2 つ目のコマンドは、1 つ目が成功した場合にのみ実行されます。長い処理では、呼び出しをシェルスクリプトにまとめるか、システムに適した別のスケジューラーを使ってください。