実行中のスクリプトファイルの所属ディレクトリの取得方法

実行中のスクリプトファイルがどのディレクトリに位置するかを取得する方法について。

スクリプトファイル中に以下のように書けば、そのスクリプトファイルが所属するディレクトリが取得できます。

# Get the directory in which the current script is contained
dir = dirname( sys.frame(1)$ofile )
# Print it
print( dir )

[2018年9月26日追記] 環境によってはこのやり方がエラーになることがあるようです。その場合は別の方法をとる必要がありそうです。ちなみに here パッケージというものがあるようです(解説記事)。これ使うのがいいのかも。[追記終わり]

スクリプトの中でファイルを読み込む際に、そのスクリプトが存在するディレクトリからの相対パスで読み込みを行いたい際に便利です。ファイルの読み込みを絶対パスで指定していると、スクリプトとデータのフォルダを別の場所へ移動させた際にコードを書き直す必要が生じますが、相対パスで指定しておけばそのような問題を回避できるからです。

たった1行のコマンドではありますが、記憶しておくにはちょっとややこしいので下記のようにわかりやすい名前を付けて関数にしておき、自作関数として自動読み込みさせるようにしておくと便利でしょう。

getScriptDir = function(){
  # Get the directory of executing script
  dirname(sys.frame(1)$ofile)
}

コメント