17

在 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"

但我觉得它很丑。有没有更好的办法?谢谢你。

4

3 回答 3

19

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

args = list(var.value)
names(args) = var.name
do.call(Sys.setenv, args)
于 2012-09-21T15:03:50.683 回答
6

试试这个:

.Internal(Sys.setenv(var.name, var.value))
于 2012-09-21T15:22:14.413 回答
1

这是已接受答案的变体,但如果您想将其打包成一行,和/或避免生成中间args对象,您可以使用setNames获取命名字符向量,然后强制列出as.list

do.call(Sys.setenv, as.list(setNames(var.value, var.name)))
于 2020-07-31T18:55:27.053 回答