R有懒惰的评价,所以变量名称标识的标识比其他语言稍微不清楚。这是用在像dplyr
库,你可以写,例如:
summarise(mtcars, total_cyl = sum(cyl))
我们还可以知道这些记号的意思是:summarise
和sum
定义功能,mtcars
是一个定义的数据帧,total_cyl
是关键词参数为功能summarise
。但是什么是cyl
?
> cyl
Error: object 'cyl' not found
这不是什么!那么,还没有。 R并不立即对其进行评估,而是将其视为要解析的表达式稍后与某些解析树与您的命令行正在处理的全局环境不同,具体而言,其中定义了mtcars
列。某处在dplyr的胆量,这样的事情正在发生:
> substitute(cyl, mtcars)
[1] 6 6 4 6 8 ...
突然cyl
意味着什么。这就是substitute
的用途。
那么什么是quote
?那么有时候,你希望你的懒惰评估的表达式在之前被评估为,即你想显示你正在编写的实际代码而没有任何(或只有一些)值被替换。您引用的文档解释了这对于“数据集和图的信息标签”很常见。
因此,例如,您可以创建一个带引号的表达式,然后在图表中打印未评估的表达式,以显示如何计算并实际计算的表达式。
expr <- quote(x + y)
print(expr) # x + y
eval(expr, list(x = 1, y = 2)) # 3
注意substitute
能做到这一点表情也伎俩同时给你解析的只是其中的一部分的选项。所以它的功能是quote
的超集。
expr <- substitute(x + y, list(x = 1))
print(expr) # 1 + y
eval(expr, list(y = 2)) # 3
这是一个非常好的资源,我怀疑我可以比哈德利解释得更好 - http://adv-r.had.co.nz/Computing-on-the-language.html –