разница между "разбора" и "выражения" - PullRequest
0 голосов
/ 29 ноября 2018

Я считаю, что есть различие между синтаксическим анализом выражения с помощью функции "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)», но нет возможности обратиться к элементу ar1 из a , я хочу преобразовать a в формат b , кто-нибудь может мне помочь, я буду признателен.

1 Ответ

0 голосов
/ 29 ноября 2018

Хотя 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) имеет атрибут name.Мы могли бы также попытаться дать a: 1011

> a <- structure(parse(text="0"), .Names = "ar1")
> a$ar1
[1] 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...