2012-09-21 151 views
11

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

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

回答

16

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

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

试试这个:

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

+1,但不这样做在一个包,因为它是针对CRAN政策。 –

+0

@JoshuaUlrich,请您详细说明您的评论?是否因为'.Internal'函数不受相同(严格)向后兼容性要求的限制? – flodel

+3

@flodel:请参阅[CRAN存储库策略](http://cran.r-project.org/web/packages/policies.html):“CRAN软件包应该只使用公共API ...” –