【发布时间】:2023-05-26 09:21:01
【问题描述】:
问题描述
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 只是一个示例。
【问题讨论】:
标签: r metaprogramming rlang tidyeval pryr