2013-05-10 9 views
6

R内からOSの一時ディレクトリを見つけるためのクロスプラットフォームの方法は何ですか?私は現在、以下を使用しています:システム内のTMPディレクトリをR

dirname(tempdir()) 

インタラクティブRセッションの中で、どちらがUbuntuとWindowsの両方で仕事をしましたか?しかし、それはRApache内から呼び出されたときに失敗しました。 RApacheでは、tempdir()の値は常に/tmpなので、dirname(tempdir())の結果は/になりますが、これは間違いです。私も試してみました:

Sys.getenv("TMP") 
Sys.getenv("TEMP") 
Sys.getenv("TMPDIR") 

?"environment variables"によって提案されたが、これらのどれもがUbuntuの中で設定されていないよう。 /etc/R/*のファイルにも設定されていないようですので、Rがどのようにこの値を検出したのかよくわかりません。

+0

'tempdir()'がいつも '/ tmp'を困惑させてしまうのはなぜですか?あなたはそのディレクトリへの書き込み権限を持っていますか? – flodel

+0

私はrApacheがいくつかのキャッシングを実装するためにCレベルのグローバル 'R_TempDir'を設定すると思います。 https://github.com/jeffreyhorner/rapacheを参照してください。 – Jeroen

答えて

1

C変数R_TempDirが設定されていない場合、環境変数 "TMPDIR"、 "TMP"、 "TEMP"を使用してtempdir()が返す値を変更することができます。 。これは、機能に基づいています

gettmpdir <- function() { 
    tm <- Sys.getenv(c('TMPDIR', 'TMP', 'TEMP')) 
    d <- which(file.info(tm)$isdir & file.access(tm, 2) == 0) 
    if (length(d) > 0) 
    tm[[d[1]]] 
    else if (.Platform$OS.type == 'windows') 
    Sys.getenv('R_USER') 
    else 
    '/tmp' 
} 

:あなたは、合理的なtmpディレクトリのパスを返しますクロスプラットフォームの機能をしたい、とR_TempDirの値に興味を持っていない場合、あなたはこのようなものを使用することができます

関連する問題