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来自 R 源代码分发的文件 src/main/sysutils.c 中的函数,从 C 转换为 R。

于 2013-05-10T23:15:44.440 回答