在R中读取系统TMP目录

时间:2013-05-10 03:25:17

标签: r cross-platform cran

从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如何检测到这个值。

1 个答案:

答案 0 :(得分:2)

如果未设置C变量tempdir(),则可以使用环境变量“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'
}

这是基于R源代码分发文件src / main / sysutils.c中的函数InitTempDir,从C转换为R.