Чтение системы TMP dir в R

Что такое кросс-платформенный метод для поиска временного каталога ОС из R? В настоящее время я использую:

dirname(tempdir())

который выполнил работу как на Ubuntu, так и на Windows из интерактивного сеанса R. Однако затем он потерпел неудачу при вызове изнутри RApache. В Рапаче значение tempdir() всегда /tmp, Так что dirname(tempdir()) результаты /, что, очевидно, неправильно. Я тоже попробовал:

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

как было предложено ?"environment variables" но ни один из них не был установлен в Ubuntu. Он также, похоже, не установлено ни в одном из файлов в /etc/R/* поэтому я не совсем понимаю, как определяет это значение.

1 ответов


переменные среды "TMPDIR", "TMP" и "TEMP" могут использоваться для изменения значения, возвращаемого tempdir() если переменная C 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 в файле src / main / sysutils.c из источника R распределение, переведенное с C на R.