问题描述
Sys.setenv
没有简单的接口来提供 LHS(环境变量名称)作为参数。如果想要动态定义应该设置什么环境变量,那么就需要元编程方法。
基础 R 方式
这个小辅助函数按预期工作。
setenv = function(var, value, quiet=TRUE) {
stopifnot(is.character(var), !is.na(var), length(value)==1L, is.atomic(value))
qc = as.call(c(list(quote(Sys.setenv)), setNames(list(value), var)))
if (!quiet) print(qc)
eval(qc)
}
var_name = "RISCOOL"
Sys.getenv(var_name)
#[1] ""
setenv(var_name, value=150, quiet=FALSE)
#Sys.setenv(RISCOOL = 150)
Sys.getenv(var_name)
#[1] "150"
问题
问题是如何使用pryr
或rlang
( tidyeval
) 之类的包来解决问题?或者最终是另一个流行的。
我根本不知道这些包,并希望更好地了解它们如何简化我的元编程代码。
请注意,问题是关于元编程的,设置 env var 只是一个例子。