以编程方式设置环境变量

时间:2012-09-21 15:01:38

标签: r environment-variables

在R中,我可以“手动”设置环境变量,例如:

Sys.setenv(TODAY = "Friday")

但是,如果环境变量名称和值存储在R对象中会怎样?

var.name  <- "TODAY"
var.value <- "Friday"

我写了这个:

expr <- paste("Sys.setenv(", var.name, " = '", var.value, "')", sep = "")
expr
# [1] "Sys.setenv(TODAY = 'Friday')"
eval(parse(text = expr))

确实有效:

Sys.getenv("TODAY")
# 1] "Friday"

但我发现它很难看。有没有更好的办法?谢谢。

3 个答案:

答案 0 :(得分:17)

您可以使用do.call使用该命名参数调用该函数:

args = list(var.value)
names(args) = var.name
do.call(Sys.setenv, args)

答案 1 :(得分:6)

试试这个:

.Internal(Sys.setenv(var.name, var.value))

答案 2 :(得分:0)

这是已接受答案的一种变体,但是如果要将其打包到一行中,并且/或者避免生成中间的args对象,则可以使用setNames来获得一个命名的字符向量,然后用as.list强制列出:

do.call(Sys.setenv, as.list(setNames(var.value, var.name)))