Rの2つの使い方:コンソールとスクリプト
Rには対話型のコンソール(REPL:read・evaluate・print・loop)があります。式を入力すると、Rがすぐに答えを返してくれます。ターミナルで R と入力するか、RStudioの下部ペインを見ると > プロンプトが現れ、Enterを押した瞬間に各行が実行されます。コンソールは探索の場です。データをつつき、1行試し、結果を眺める。
Rスクリプトは、.R 拡張子で保存されたRコードのただのテキストファイルです。分析が住まう場所であり、誰でも(未来の自分を含めて)上から下まで実行すれば同じ結果が得られる、再現可能なレシピです。
スクリプトは特別なものではありません。これで完結した1本です。実行してみてください。
以下では、このようなファイルをRに渡すさまざまな方法を見ていきます。
Rscript:コマンドラインからファイルを実行する
Rにはまさにこのための Rscript というコマンドラインツールが付属しています。ターミナルで、ファイルのあるフォルダに移動して実行します。
Rscript summary.R
Rが起動し、ファイルを上から下まで実行し、スクリプトが出力するものを表示して終了します。これは自動化の主役です。cronジョブ、データパイプライン、サーバー、CIなど、人が見ていない場所でコードを走らせるときに使います。
一度は誰もが驚く挙動がひとつあります。コンソールでは avg のような裸の式を入力すると値が自動的に表示されますが、Rscript では関数やループの内側にある裸の式は何も表示しないことがあります。だからこそスクリプトでは cat() や print() を明示的に書いて意図を伝えるのです。早いうちにその習慣をつけましょう。
source():R内部からファイルを実行する
すでにRセッションにいて、ファイルを実行したい場合は source() です。
source("summary.R")
ファイルの全行が現在のセッションで実行され、そのスクリプトが定義したもの——変数や関数——は実行後もそのまま残ります。それが狙いです。source() は自作のヘルパー関数を対話セッションに読み込む手段でもあります。
既定では、source() は明示的な出力以外は静かに実行されます。動作を目で追いたいときは、実行しながら各行を表示させましょう。
source("summary.R", echo = TRUE)
相対パスに注意してください。"summary.R" は「現在の作業ディレクトリの中」という意味で、それがどこかはRをどう起動したかで変わります。source() や read.csv() がすぐそこにあるファイルを不思議と見つけられないとき、原因はほぼ確実に作業ディレクトリです。作業ディレクトリを参照してください。
RStudioでスクリプトを実行する
RStudioは2つのコマンドで両方のモードを提供します。この違いは体に染み込ませておく価値があります。
- Run(Ctrl+Enter、macOSではCmd+Enter)— 現在の行、または選択範囲をコンソールで実行します。探索用のギアです。1行書いて、実行して、眺めて、調整する。
- Source(Sourceボタン、または Ctrl/Cmd+Shift+S)— ファイル全体を実行します。コンソールで
source()を呼ぶのとまったく同じです。
行ごとのRunに潜む罠は、コンソールのセッションに状態が積み上がることです。後から編集したり削除したりした行の変数がまだ生きているため、そのスクリプトは自分の環境では「動く」のに、他の人の環境では失敗します。スクリプトの正直なテストは、新しいセッションでのSourceです(Session → Restart R してからSource)。これを生き延びれば、そのスクリプトは再現可能です。
スクリプトを実行可能にする(macOS / Linux)
Unix系システムでは、Rスクリプトをそれ自体ひとつのコマンドに変えられます。ファイルの一番上にシバン行を置きます。
#!/usr/bin/env Rscript
cat("I am a self-running R script\n")
あとは一度だけ実行権限を付けて、直接実行するだけです。
chmod +x summary.R
./summary.R
シバンは、そのファイルをどのインタプリタで実行するかをシェルに伝えます。env Rscript は、そのマシンのPATH上のどこにあっても Rscript を見つけてくれます。行が # で始まるので、R自身はこれをコメントとして無視します。
スクリプトに引数を渡す
実務のスクリプトは入力を受け取ります。ファイル名、日付、しきい値などを、スクリプト名の後ろに続けて渡します。
Rscript report.R sales.csv 2026
スクリプトの中では、commandArgs(trailingOnly = TRUE) が引数を文字列ベクトルとして返します(trailingOnly = TRUE はインタプリタ自身の内部引数を落とすもので、ほぼ常に付けたい指定です)。
# report.R
args <- commandArgs(trailingOnly = TRUE)
input_file <- args[1]
year <- as.numeric(args[2])
cat("Reading:", input_file, "\n")
cat("Filtering to year:", year, "\n")
すべて文字列として届くので——2026 ではなく "2026" です——計算する前に as.numeric() で変換します。この解析ロジックは、実行できるかたちで再現できます。
どれを使えばいい?
- データの探索、アイデアの試行 → コンソール、またはRStudioのRun。
- 分析全体の実行 → RStudioのSource、またはターミナルでの
Rscript。 - ヘルパー関数をセッションに読み込む →
source("helpers.R")。 - 自動化、スケジューラ、パイプライン →
Rscript。入力はcommandArgs()で受け取る。
そうしたファイルの中身の文法は次のレッスンです。Rの文法をご覧ください。
この記事のまとめ
- コンソールは探索用、
.Rスクリプトファイルは再現可能な分析用です。 Rscript file.Rはコマンドラインからスクリプトを実行し、source("file.R")はセッション内で実行します(echo = TRUEで実行の様子を表示)。- RStudioではRunが1行を、Sourceがファイル全体を実行します。まっさらなセッションでのSourceこそが本当の再現性テストです。
#!/usr/bin/env Rscriptとchmod +xでスクリプトを直接実行可能にできます。commandArgs(trailingOnly = TRUE)は引数を文字列として読み取ります。
次は、Rの文法——<- による代入、関数呼び出し、そして「すべてがベクトル」という原則です。
よくある質問
コマンドラインからRスクリプトを実行するには?
Rに同梱されている Rscript コマンドを使います。Rscript analysis.R のように書くと、ファイルを最初から最後まで実行し、スクリプトが出力するものをすべて表示します。スケジュール実行、パイプライン、サーバー上でRを動かす標準的な方法です。
RStudioのRunとSourceの違いは何ですか?
Run(Ctrl/Cmd+Enter)は現在の行または選択範囲だけをコンソールで実行します。探索中に最適です。Source は Rscript と同じように、ファイル全体を一度に実行します。まっさらなセッションでスクリプトをSourceすることが、上から下まで正しく動くかどうかの本当のテストになります。
Rのsource()は何をしますか?
source("script.R") はファイルを読み込み、その全行を現在のRセッション内で実行します。そのため、そのファイルが定義した変数や関数はそのまま使えるようになります。echo = TRUE を付けると、実行しながら各行を表示してくれます。
Rスクリプトに引数を渡すには?
Rscript script.R value1 value2 のように実行し、スクリプト内で args <- commandArgs(trailingOnly = TRUE) として読み取ります。trailingOnly = TRUE はインタプリタ自身の内部的な引数を取り除き、自分が渡したものだけを残します。すべて文字列として届くので、数値は as.numeric() で変換してください。