バッチモード
普通 R は対話モードで使用するが、定型的な作業や、 Perl 等のスクリプトから実行するには、 バッチモードも便利である。
test.R を実行内容を書いた R のスクリプトファイル、test.out を出力内容を納めるファイルとする。
% R --vanilla --slave < test.R > test.out # Unix のコマンドラインからバッチモードで実行
test.R は例えば、
write(rnorm(4),"") # 正規乱数を4つ出力する q() # R を終了する
はてこれの便利な使い道は?
% R --vanilla --quiet --args bli bla blo # bli bla blo はコマンドライン引数
# 一人でに R が起動される
> commandArgs() # 記録された引数を表示する関数
[1] "/usr/bin/R.bin" # 起動された命令
[2] "--vanilla"
[3] "--quiet"
[4] "--args"
[5] "bli" # 3つの引数(文字列として記録)
[6] "bla"
[7] "blo"
コマンドライン引数を数字にしたければ x <- as.numeric(commandArgs()[5:7]) とする。
便利かどうかは分かりませんが,プログラムへのパラメータの引き渡し方としては必須でしょう。 以下の例では引数の位置を決めうちしていますが,そのあたりはちゃんと処理するようにしないと不便だし危険ですけどね。
乱数のヒストグラムを作って pdf ファイルへ書き出すプログラム
$ [12] > cat test.R
args <- commandArgs()
file <- args[5]
pdf(file, width=as.numeric(args[6]), height=as.numeric(args[7]))
hist(rnorm(as.numeric(args[8])))
dev.off()
ファイル名とサイズとデータサイズを,R への引数で与える
$ [13] > R --vanilla --quiet --args test1.pdf 8 5 1000 < test.R
> args <- commandArgs()
> file <- args[5]
> pdf(file, width=as.numeric(args[6]), height=as.numeric(args[7]))
> hist(rnorm(as.numeric(args[8])))
> dev.off()
null device
1
>
$ [14] > R --vanilla --quiet --args test2.pdf 5 3 100 < test.R
> args <- commandArgs()
> file <- args[5]
> pdf(file, width=as.numeric(args[6]), height=as.numeric(args[7]))
> hist(rnorm(as.numeric(args[8])))
> dev.off()
null device
1
2008-6-26 ma_ko 追記:R 2.7.0の時点では commandArgs(trailingOnly = TRUE) とすると --args 以下の引数がとってこれるようになっています。
テキストファイルをハンドルしつつ、Rが得意な部分をRのバッチモードで実施するのは、簡単で便利。関数を変えるたびに使いまわすための雛形を作成。詳細は