首页 > 解决方案 > 在 rlang 包中使用带有 quo() 的特殊字符的字符串

问题描述

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

<quosure: global>
~a - b

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

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

所以问题是为什么我得到~'ab',而不是~ab。我怎样才能简单地获得〜ab。请注意 quo(!!sym("a")) 按预期返回:

<quosure: global>
~a

所以似乎 - 符号存在问题(* 也会发生同样的情况)。是否与某些特殊字符/非标准评估问题有关?我该如何解决?

标签: rstringevaluationrlang

解决方案


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


推荐阅读