替代(substitute())做什么?

时间:2015-06-11 04:32:26

标签: r

我并不完全确定我理解resources的作用,尽管我之前使用过代码。今天我在substitute中遇到了以下几行代码:

shiny::exprToFunction

有人可以解释为什么在这里使用嵌套function (expr, env = parent.frame(2), quoted = FALSE, caller_offset = 1) { expr_sub <- eval(substitute(substitute(expr)), ... } ?一个易于运行的例子真的会有所帮助。

1 个答案:

答案 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捕获变量名的方法仅在参数仍为承诺时才有效;也就是说,它们还没有被评估过。