我正在寻找一种方法来引用传递给函数的参数(考虑substitute()
,ggplot2
的{{1}},aes()
或subset()
' s data.table
行为),但有条件地执行 - 仅在尚未引用[
的情况下。
这是因为我想轻松地链接函数,这些函数不会假设参数是否先前被引用 - 而是根据需要替换它。
几个问题:
quote()
部分是因为如果tryCatch
promise评估为未定义的变量,is.language
会抛出错误。还有其他/更好的解决方案吗? 我想出了什么:
x
工作原理:
substitute_c <- function(x) {
e <- suppressWarnings(
tryCatch({x; FALSE},
error = function(e) TRUE))
if (e || !is.language(x)) {
substitute_q(substitute(x), env = parent.frame())
} else {
x
}
}