什么是替代(替代())?
问题描述:
我不完全相信我明白substitute
是干什么的,尽管我以前在代码中使用过。今天,我在shiny::exprToFunction
遇到下面的代码行:什么是替代(替代())?
function (expr, env = parent.frame(2), quoted = FALSE, caller_offset = 1)
{
expr_sub <- eval(substitute(substitute(expr)),
...
}
是否有人可以解释为什么嵌套substitute
在这里使用?一个易于运行的示例将非常有帮助。
答
在
a<-function(aa) {
b(aa)
}
b<-function(bb) {
z(bb)
}
z<-function(zz) {
print(substitute(zz))
print(substitute(substitute(zz)))
print(eval(substitute(substitute(zz)), parent.frame()))
}
q<-5
a(q)
# bb
# substitute(bb)
# aa
看看第一/内替代抓住传递给被调用函数的名称/符号。第二个/外部的substitute()
只是围绕该发现的名称/符号包装substitute()
命令。然后substitute()
在它来自的父环境中进行评估。
使用substitute
捕获变量名称的方法仅在参数仍有承诺时才有效;也就是说,他们还没有被评估过。