寻找一种在引用语言对象上使用替换作为表达式的方法
substitute
期望在expr
中得到懒惰的表达
目标是在.expr
中替换expr.template
,## data
expr = quote(x <- f(10))
expr.template = quote(g(.expr, flag = TRUE))
## expected output
quote(g(x <- f(10), flag = TRUE))
#g(x <- f(10), flag = TRUE)
## current workaround
h = function(expr, expr.template){
eval(substitute(
substitute(
.expr.template,
list(.expr = expr)
),
list(.expr.template = expr.template)
))
}
h(expr = expr, expr.template = expr.template)
#g(x <- f(10), flag = TRUE)
是基于元数据动态生成的语言对象。
xml
如果没有更多的规范方法来处理它,我会感到惊讶。基础R溶液是优选的。
答案 0 :(得分:6)
使用do.call
:
do.call("substitute", list(expr.template, list(.expr = expr)))
## g(x <- f(10), flag = TRUE)