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

Using string with special characters with quo(), in rlang package

我有两个变量,a 和 b。我尝试使用带有 rlang 包的表达式来计算 a-b。 quo(a-b) returns,如预期:

<quosure: global>
~a - b

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

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

所以问题是为什么我获得了 ~'a-b',而不是 ~a-b。我怎样才能简单地获得〜a-b。注意 quo(!!sym("a")) returns,正如预期的那样:

<quosure: global>
~a

看来 - 符号有问题(* 也会出现同样的问题)。是不是和一些特殊字符/不规范的评价问题有关?我该如何解决?

使用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