我并不完全确定我理解resources
的作用,尽管我之前使用过代码。今天我在substitute
中遇到了以下几行代码:
shiny::exprToFunction
有人可以解释为什么在这里使用嵌套function (expr, env = parent.frame(2), quoted = FALSE, caller_offset = 1)
{
expr_sub <- eval(substitute(substitute(expr)),
...
}
?一个易于运行的例子真的会有所帮助。
答案 0 :(得分:6)
看看
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
捕获变量名的方法仅在参数仍为承诺时才有效;也就是说,它们还没有被评估过。