トップ «前の日記(2019年09月28日) 最新 次の日記(2020年02月21日)» 編集

役に立たない情報


2020年02月01日 [R基礎]Rをスクリプトで直接実行して引数を取得する方法

_ [R基礎] なんでRを使うのか?

Rってあんじゃん?卒論とかのデータをまとめるのにすげー便利なんだけど,みんなあんまり使わないんだよね.みんなxlsとかのファイルとか使う.

もうね正直やめてほしい.

スクリプトベースでデータ加工方法を残せるからRの方がいいんだよ.再現性も担保できるし,生データをcsv形式でもテキストベースでも残せちゃう.まあxlsでも残せるっちゃ残せるんだけど他のファイルへのリンクってディレクトリ管理が面倒になるので,なるべくポータビリティを考えてほしい.君ら学生ってすぐ卒業しちゃうし.

んでね,このblogでもRの使い方,Tipsみたいなものをちょこちょこ書いていくから覚悟しろこのやろ.

_ [R基礎] Rをスクリプトで実行する方法

普通さRってコマンドを実行するかR Studioを使うか,まあいずれにしてもRアプリケーション関連のアプリでしか実行できないよねって思っている初学者が多い.まあそうだよね.インタラクティブに使うならいいんだけど,ちょっとなれてきたり,大きな行列とか扱いだすと面倒なんだよね正直.

で,Rってスクリプト言語だって言ってるからスクリプトとして書いて動かしたいじゃん?

[kido@localhost ~]$ Rscript hoge.R

とかするとhoge.Rに書かれたスクリプトが実行されちゃう.Rscriptってコマンドの存在を知れば,まあこれはわかる. で,他にもこんな書き方もできる.

hoge.Rを以下のように書く

#!/usr/bin/Rscript
a <- c("hoge", "hoge", "hoge")

んでhoge.Rに実行権限あたえてちゃうと,

[kido@localhost ~]$ ./hoge.R

で実行できちゃう.

_ [R基礎] Rscriptで実行したスクリプトの中で実行引数を取得する

せっかくスクリプトにしたんだから入力ファイル名とか引数で渡したいじゃん?スクリプトの中にハードコードしちゃうと汎用性下がるし. そんな時はcommandArgs()って関数を呼ぶといいよ.以下のようにhoge.Rを書く.

#! /usr/bin/Rscript

args <- commandArgs()
args

って書いて実行しちゃう.

[kido@localhost ~]$ ./hoge.R p0 p1 p2
[1] "/usr/lib/R/bin/exec/R" "--slave"               "--no-restore"
[4] "--file=./hoge.R"       "--args"                "p0"
[7] "p1"                    "p2"

こんな感じで表示される.つまりRscript実行パラメータの後にからユーザが渡した引数が得られるということがわかる.もちろん

#! /usr/bin/Rscript --vanilla

とかで渡した引数ももちろんこれで取得できるんだけど,できればユーザが渡した引数,p0, p1, p2だけほしいよね?そういう場合は,

#! /usr/bin/Rscript

args <- commandArgs(trailingOnly=TRUE)
args

としてtrailingOnlyをTRUEにしてcommandArgs関数を呼ぶといいよ.そうすると

[kido@localhost ~]$ ./hoge.R p0 p1 p2
[1] "p0" "p1" "p2"

てな感じでユーザ引数だけ取れるよ.便利だね!

参考文献:R documentation, commandArgs