2010-11-29 4 views
6

私はLinuxでRを使っています。 私は頻繁に使用する関数を設定して、別の.rスクリプトファイルに保存しました。それらのファイルは〜/ r_lib /にあります。Rはライブラリディレクトリ内のファイルを探します

完全修飾名を使用せずに、これらのファイルを含めたいと思いますが、 "file.r"だけです。基本的に私は、C++コンパイラで-Iと同じコマンドを探しています。

私は、Rからのインクルードファイルを.Rprofileまたは.Renvironファイルに設定する方法はありますか?

おかげ

+1

は少し違うアプローチを取るために、 'file.r'をあなた自身のパッケージにまとめることを検討することができます。私は長い間、あなたと同様のワークフローを持っていました。そして、誰かが私を[roxygen](http://roxygen.org/)の方向で指摘しました。私は最初のファイルでかなり勤勉にコメントしていたので、それをroxygen形式に変換するのは非常に些細な作業でした。 – Chase

+0

指先ですべての機能を使って独自のパッケージを作成してください。それは簡単で簡単です。私はここに私の経験を記録している:http://danganothererror.wordpress.com/2010/07/23/building-an-r-package-under-windows-without-cc-or-fortran-code/ –

答えて

5

あなたは?sourceの実施例の節にsourceDir機能を使用することができます。

sourceDir <- function(path, trace = TRUE, ...) { 
    for (nm in list.files(path, pattern = "\\.[RrSsQq]$")) { 
     if(trace) cat(nm,":")   
     source(file.path(path, nm), ...) 
     if(trace) cat("\n") 
    } 
} 

そして、あなたはあなたの地球環境の混乱を避けるためにsys.sourceを使用することができます。

+0

良い点re ' sys.source'である。 –

0

はあなたを好きなら、あなたのケース

d <- list.files("~/r_lib/") 

に、あなたはplyrパッケージ

library(plyr) 
l_ply(d, function(x) source(paste("~/r_lib/", x, sep = ""))) 

の機能でそれらをロードすることができ、あなたのディレクトリのすべてのファイルを取得します。ループ内でそれを行うこともできますし、l_plyという別の関数を使用することもできます。従来のループ:

for (i in 1:length(d)) source(paste("~/r_lib/", d[[i]], sep = "")) 
0

独自のsource()ラッパーを作成しますか?

mySource <- function(script, path = "~/r_lib/", ...) { 
    ## paste path+filename 
    fname <- paste(path, script, sep = "") 
    ## source the file 
    source(fname, ...) 
} 

あなたがですべてのファイルをソースしやすい上記を拡張することができ、あなたの.Rprofileが毎回ロードされますされないで、すべてのRファイルをロードしたい場合はR.

を開始することを固執することができ一度

mySource <- function(path = "~/r_lib/", ...) { 
    ## list of files 
    fnames <- list.files(path, pattern = "\\.[RrSsQq]$") 
    ## add path 
    fnames <- paste(path, fnames, sep = "") 
    ## source the files 
    lapply(fnames, source, ...) 
    invisible() 
} 

実際には、自分のプライベートパッケージを開始して読み込むほうがよいでしょう。

+0

パスを作成するのに 'file.path'を使用する方が一般的には良いです。 – hadley

1

あなたはTRUEにソースのchdirパラメータを設定した場合は、インクルードファイル内のsourceの呼び出しは、そのパスからの相対になります。したがって、あなたが呼び出すことができます。

source("~/r_lib/file.R",chdir=T) 

それはおそらくあなたの「ライブラリ」内のソース・コールを持っており、パッケージにあなたのコードを作成し、時にはこれは便利ですしない方が良いでしょう。

+0

'source'の' chdir'引数を参照してください。 – hadley

+0

@hadleyありがとう!私はそれに応じて私の答えを更新しました。私は 'source'へのそのような議論を探しましたが、明らかに十分に難しくありませんでした。 – Jonathan

関連する問題