通过解析或表达式定义表达式之间的区别

时间:2016-12-24 00:16:59

标签: r parsing expression

parse是一个返回表达式的函数。做

parse(text = "print('hey')")

返回

expression(print('hey'))

还可以通过

来识别表达式
expression(print('hey'))

稍微出乎意料的是,这是

的输出
expression(print("hey")) 

请注意双引号的变化。但这不是唯一的区别。将parse(text = "print('hey')")传递给getParseData的输出与传递expression(print('hey'))的输出不同。

getParseData(parse(text = "print('hey')"))

line1 col1 line2 col2 id parent                token terminal  text
9     1    1     1   12  9      0                 expr    FALSE      
1     1    1     1    5  1      3 SYMBOL_FUNCTION_CALL     TRUE print
3     1    1     1    5  3      9                 expr    FALSE      
2     1    6     1    6  2      9                  '('     TRUE     (
4     1    7     1   11  4      6            STR_CONST     TRUE 'hey'
6     1    7     1   11  6      9                 expr    FALSE      
5     1   12     1   12  5      9                  ')'     TRUE     )

getParseData(expression(print('hey')))

NULL

我不确定这两项产出之间的区别是什么,我非常想知道。

另一点是(一旦得到答案,可能会被问到一个单独的问题)parse在返回“可解析”的问题时甚至不一致。输出。当我在Rstudio的调用parse的测试环境中测试使用devtools::test的函数时,我首先意识到存在差异。在那里,parse(text = expression(print('hey')))返回双引号输出expression(print("hey")),当传递给getParseData时返回NULL

1 个答案:

答案 0 :(得分:3)

区别仅在于属性。如果从已解析的版本中删除属性,则它们是相同的:

p <- parse(text = "print('hey')")
attributes(p) <- NULL

e <- expression(print('hey'))

identical(p, e)
## [1] TRUE
相关问题