R はバッチモードにより実行することができる。バッチモードを利用することで、時間のかかる大規模な処理をあらかじめファイルに書いてから qsub などで実行できるようになる。また、Perl や Python などといったプログラミングからも R を呼び出して実行したりすることもできるようになる。
コマンドラインでの実行
コマンドライン上で R にスクリプトファイルを読み込ませて、処理を行う際に --slave
と --vanilla
オプションを付ける。
R CMD BATCH --slave --vanilla script.R script.R.log
引数の受け渡し
バッチモードで外部から引数を与えるときは、--args
引数を文字列として与える。
R CMD BATCH --slave --vanilla '--args x=10 y=20' script.R script.R.log
このとき、script.R は以下のように書くと、外部から与えられた x
および y
を受け取ることができる。
args <- commandArgs(TRUE)
if (length(args) == 2) {
for(i in 1:length(args)){
eval(parse(text = args))
}
} else {
stop()
}
z <- x + y
z
Perl から R 呼び出して実行
Perl から R を呼び出して実行する場合はバッチモードを利用する。スクリプトファイルを一度作成してから実行させる。
use strict;
# Rコードを作成
my $code = <<EOF;
a <- 10
b <- 10
x <- a + b
write.table(x, file = "result.txt")
EOF
# Rコードをファイルに保存
open(my $fh, '>', "./exe_script.R") or die;
print $fh $code;
close($fh);
# Rコードを実行
system("R CMD BATCH --slave --vanilla ./exe_script.R ./exe_script.R.log");