2012-02-03 12 views
3

Rには実行中のコードを含むファイルへの完全なディレクトリパスを返すコマンドがありますか?PHPの$_SERVER['SCRIPT_FILENAME']と同様ですか?ファイルを格納するディレクトリを返す

+0

コードをどのように実行していますか? –

+0

おそらく 'getwd()'はあなたが探しているものですか?しかし、ジョシュアは答えてくれました! – Justin

+0

@JoshuaUlrich - 私は[RStudio](http://rstudio.org/)を使用しています。 – eykanal

答えて

2
(Linux上または "/tmp/foo.R")

私は3つの答えを考えることができますが、Rの実行モデルはPHPのものとは異なるため、おそらく完全に満足できるものはありません。 a)R実行可能ファイルの場所、b)ファイルを保存するためのデフォルトディレクトリの場所、c)明白な場所が指定されていない場合、Rがインストールされたパッケージを検索する場所

R.home() 
#[1] "/Library/Frameworks/R.framework/Resources" 
getwd() 
#[1] "/Users/davidwinsemius" 
.libPaths() 
#[1] "/Users/davidwinsemius/Library/R/2.14/library"     
#[2] "/Library/Frameworks/R.framework/Versions/2.14/Resources/library" 

私はあなたが実際に望むかもしれない第四の選択肢を考えました。 CMD呼び出しでRのバッチセッションを開始した場合は、そのコマンドの最初の行でargsをリカバリできます(コールの仕方やOSに応じて):

cmdargs <- commandArgs(TRUE) 
cmdargs["infile"] 
2

最も簡単な方法は、chdir=TRUE引数を使用してスクリプトを実行するようにsourceを呼び出すことです。その後、スクリプトはgetwd()を呼び出すだけです。しかし、これは正しいことをするスクリプトの呼び出し側に依存します。

もう1つの方法は、各機能が通常、送信元情報を保存する(無効にすることができる)ことを認識することです。したがって、スクリプトで関数を定義すると、関数インスタンスからファイル名を抽出できます。

"C:/foo.R" に次のように入れてください:それを試してみてくださいそして、...

whereAmI <- function() attr(attr(whereAmI, 'srcref'), 'srcfile')$filename 

fileName <- whereAmI() 
cat("Here I am:", fileName, "\n") 
cat("In folder:", dirname(fileName), "\n") 

> source("c:/foo.R") 
Here I am: c:/foo.R 
In folder: c:/  
+0

それは、バイトコンパイルされた最後の関数のランダムに生成された場所ですか? –

+0

私にとっては(R 2.14.0)ではなく、 'compiler :: enableJIT(4)'を呼んでも意味がありません。あなたは奇妙な結果を得ますか? – Tommy

+0

私は "私はここにいます:/ var/folders/xS/xSUsVXTIHEiP7OLJg2OXmU +++ TI/-Tmp - // RtmpqeJtDX/file1f9196a0"です。そして、それはwhereAmIへの呼び出しを全く伴わなかったので、最後に定義された関数の場所であると仮定しました。 –

1

sourceコマンド(将来のバージョンのRで変更される可能性があります)の内部に依存するため、これは少し壊れやすいものですが、ソースファイルのこの行はそれを実行する必要があります。これは、ソースファイル内のトップレベルに直接存在し、ソースファイル内の関数ではありません。

this.dir <- dirname(sys.frame(1)$ofile) 
関連する問題