从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 :(得分: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.