在rlang包中使用带有quo()的特殊字符的字符串

时间:2018-05-03 11:44:31

标签: r string evaluation rlang

我有两个变量,a和b。我尝试使用rlang包使用表达式计算a-b。 quo(a-b)按预期返回:

<quosure: global>
~a - b

但是,我有一个和b作为字符串。所以我尝试了:quo(!! sym(&#34; a-b&#34;)),结果是

<quosure: global>
~`a-b` #(note the '')

所以问题是为什么我得到了〜&#39; a-b&#39;而不是~a-b。我怎样才能简单地获得~a-b。请注意,quo(!! sym(&#34; a&#34;))按预期返回:

<quosure: global>
~a

所以似乎 - 符号存在问题(与*相同)。它与某些特殊字符/非标准评估问题有关吗?我该如何解决?

1 个答案:

答案 0 :(得分:1)

使用parse_expr ...

library(rlang)
q0 <- quo(a - b)
q1 <- quo(!!parse_expr("a - b"))
identical(q0, q1)
# [1] TRUE

...或parse_quo

q2 <- parse_quo("a - b", global_env())
identical(q0, q2)
# [1] TRUE

请参阅此处的讨论:https://github.com/r-lib/rlang/issues/116