teramonagi 氏の『実行したいファイルが保存してあるフォルダを自動で作業フォルダにしコードを実行する方法』に,作業ディレクトリを移動して相対パスを解決する方法が書かれています。メインの R コード中でディレクトリの位置が重要である場合は作業ディレクトリの移動が必要ですが,相対パスを何とかするくらいならディレクトリの移動はしなくては良いのではないかと思います。
R ではソースファイルのあるディレクトリを以下のように取得できます。
(function() {
path <- (function() attr(body(sys.function(-1)), "srcfile"))()$filename
dirname(path)
})()
これは,この関数が定義されたソースファイルを取得するので,関数として .Rprofile に定義するみたいなことは難しい気がします[A]。これを用いると,ソースファイルからの相対パスを絶対パスに変換することができます。例えば先述のブログ記事の例だと次で動きます[B]。
require(Rcpp)
currentDirectory <- (function() {
path <- (function() attr(body(sys.function(-1)), "srcfile"))()$filename
dirname(path)
})()
sourceCpp(file.path(currentDirectory, "TenTimes.cpp"))
x <- 1:10
TenTimes(x)
少し長くなってしまいますが,呼び出し元から作業ディレクトリを移動しなくて済むのがメリットですね[C]。