deparse和substitute如何工作以允许访问对象名称?

4

我的问题与以下代码相关:

myfunc <- function(v1) {
    deparse(substitute(v1))
}

myfunc(foo)
[1] "foo"

我在R中输入?deparse?substitute,并得到以下结果:

deparse = Turn unevaluated expressions into character strings.

并且
substitute = returns the parse tree for the (unevaluated) expression expr, 
substituting any variables bound in env.

我似乎真的不太理解这种语言。是否有人能简化这些描述的技术方面,以便我能开始欣赏这两个函数如何协同工作,使我们能够做一些很酷的事情,比如访问对象的变量名?


3
下一行文字在?substitute中提到,非常有启发性 - 如果它是一个promise对象,即函数的正式参数...,则promise的表达式替换符号。 - Rich Scriven
1
请查看Hadley Wickham的《Advanced R》中关于“非标准评估”的章节:http://adv-r.had.co.nz/Computing-on-the-language.html - Ernest A
1个回答

5
我也曾经遇到这个问题。从?substitutemyplot()示例中可以获得一些帮助。在那里,他们定义了:
myplot <- function(x, y)
plot(x, y, xlab = deparse(substitute(x)),
   ylab = deparse(substitute(y)))

调用

myplot(x=1:10, y = rnorm(10))

提供

输入图像描述

而另一种选择是

x = 1:10
y = rnorm(10)
plot(x, y, xlab = x, ylab = y)

提供

enter image description here

希望这可以展示deparse(substitute())的用途。在plot版本中,xlabylab参数是用于生成xy的任何输出。 myplot知道为xlabylab传递“函数实际参数的字符字符串版本”。(引自?substitute


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接