7

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

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 がこの値を検出する方法がよくわかりません。

4

1 に答える 1

3

tempdir()C変数が設定されていない場合、環境変数「TMPDIR」、「TMP」、および「TEMP」を使用して、返される値を変更できますR_TempDir(ただし、それがどのように行われるかはわかりません)。適切な tmp ディレクトリのパスを返すクロスプラットフォーム関数が必要で、 の値には関心がない場合は、次のR_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'
}

InitTempDirこれは、C から R に変換された R ソース配布のファイル src/main/sysutils.cの関数に基づいています。

于 2013-05-10T23:15:44.440 に答える