gettypes = function(x) {paramx = substitute(x); print(typeof(paramx)); print(class(paramx)); print(mode(paramx))}
gettypes(expression(sin(x+y)))
# [1] "language"
# [1] "call"
# [1] "call"
gettypes(quote(sin(x+y)))
# [1] "language"
# [1] "call"
# [1] "call"
expression(sin(x+y)) == quote(sin(x+y))
expression(sin(x + y)) == quote(sin(x + y))
中出现错误: 表达式无法进行比较。
identical(expression(sin(x+y)), quote(sin(x+y)))
# [1] FALSE
x = 1
y = 2
eval(expression(sin(x+y)))
# [1] 0.14112
eval(quote(sin(x+y)))
# [1] 0.14112
它们看起来差不多。
quote
和expression
的C源代码可以在/src/main/coerce.c和/src/main/builtin.c中找到。分别搜索这些文件中的do_quote
和do_expression
即可。 - jbaums