“解析”与“表达”之间的差异

时间:2018-11-29 11:38:19

标签: r

我发现使用“ parse”函数解析表达式与使用“ expression”类定义表达式之间是有区别的,这是代码和结果。

     > a=parse(text="ar1 = 0")
     > b=expression(ar1=0)
     > a
     expression(ar1 = 0)
     > b
     expression(ar1 = 0)
     > a$ar1
     NULL
     > b$ar1
     [1] 0

如代码所示,尽管 a b 均为“表达式(ar1 = 0) “,但无法查询 a 的元素 ar1 ,我想转换 a 格式化 b ,任何人都可以帮助我,我会感激不尽。

1 个答案:

答案 0 :(得分:2)

尽管parse返回一个expression,但其结构与expression()创建的结构不同,

看看str

> str(a)
length 1 expression(ar1 = 0)
 - attr(*, "srcref")=List of 1
  ..$ :Class 'srcref'  atomic [1:8] 1 1 1 7 1 7 1 1
  .. .. ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile' <environment: 0x000000000e0aaa00> 
 - attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile' <environment: 0x000000000e0aaa00> 
 - attr(*, "wholeSrcref")=Class 'srcref'  atomic [1:8] 1 0 2 0 0 0 1 2
  .. ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile' <environment: 0x000000000e0aaa00> 
> str(b)
  structure(expression(ar1 = 0), .Names = "ar1")

我们注意到str(b)具有名称属性。我们也可以尝试给a一个:

> a <- structure(parse(text="0"), .Names = "ar1")
> a$ar1
[1] 0