【问题标题】:setting environment variables programmatically以编程方式设置环境变量
【发布时间】:2012-09-14 00:41:24
【问题描述】:

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

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

【问题讨论】:

    标签: r environment-variables


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

      • +1 但不要在包中这样做,因为这违反了 CRAN 政策。
      • @JoshuaUlrich,您能否详细说明您的评论?是因为.Internal 函数不受相同(严格)向后兼容性要求的约束吗?
      • @flodel:见CRAN Repository Policy:“CRAN 包应该只使用公共 API...”
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-10-16
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        • 2011-12-20
        • 2011-01-08
        相关资源
        最近更新 更多