Rスクリプトの実行パスを取得する
やりたいこと
Rスクリプトでスクリプトファイルが存在しているパスを取得したい。
pythonでいうとこの__file__
を実現したい。
もうちょい踏み込んだ説明
なんでかっていうと、コマンドラインインターフェースだけ独立させて存在させたいわけですよ。
私、分析系のスクリプトをしっかり書き上げてシステム的に整えると、どーしてもコマンドライン引数は増えてきます。
で、行数が増えるから、インターフェースだけは分離する。
独立させると、何が困るか?っていうと、source(読み込みたいスクリプトパス)
の部分がおかしくなることがあるんですね。
毎回、コマンドラインインターフェース.Rのパスまで移動して実行するならいいけど、それって面倒じゃないですか。
だから、binに通して、別のところから呼び出すと、source(読み込みたいスクリプトパス)
が不都合を起こすんですね。
だって、想定しているパスと違うわけですから。
じゃあ、どないするんや?ってわけで解決法です
解決法
コマンドラインインターフェース.Rが存在しているパスを特定させる。
ここに答えがあった。
具体的にはコマンドラインインターフェース.Rにはこんな感じに書きます。
#! /usr/bin/Rscript initial.options <- commandArgs(trailingOnly = FALSE) file.arg.name <- "--file=" script.name <- sub(file.arg.name, "", initial.options[grep(file.arg.name, initial.options)]) script.basename <- dirname(script.name) source(file.path(script.basename, 'main.R'))
script.basename
にはコマンドラインインターフェース.Rが存在してるパスが代入されます。
なので、あとはmain.R
を記述するだけです。
Enjoy!