Используя пакет rlang, мне интересно, в чем разница между sym()
и parse_expr()
. Рассмотрим, например, следующие выражения:
ex1 = sym('a')
ex2 = parse_expr('a')
Они оба возвращаются
a
identical(ex1, ex2)
[1] TRUE
Предположим, теперь мне нужен вопрос:
ex3 = quo(!!sym('a'))
ex4 = quo(!!parse_expr('a'))
В обоих случаях результат:
<quosure>
expr: ^a
env: global
identical(ex3, ex4)
[1] TRUE
Тем не менее, по некоторым причинам следующие два не совпадают.
ex5 = quo(!!sym('a - b'))
ex6 = quo(!!parse_expr('a - b'))
По-видимому, они идентичны, поскольку оба возвращаются:
<quosure>
expr: ^a - b
env: global
Пока что,
identical(ex5, ex6)
[1] FALSE
Итак, мой вопрос: в чем разница между sym()
и parse_expr()
? Что делает один, чего не может другой? И почему ex5
очевидно похоже на ex6
, но identical(ex5, ex6)
возвращает ЛОЖЬ?