【问题标题】:Using string with special characters with quo(), in rlang package在 rlang 包中使用带有 quo() 的特殊字符的字符串
【发布时间】:2018-05-03 11:44:31
【问题描述】:

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

<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")) 按预期返回:

<quosure: global>
~a

所以看起来 - 符号有问题(* 也会出现同样的情况)。是否与某些特殊字符/非标准评估问题有关?我该如何解决?

【问题讨论】:

    标签: r string evaluation rlang


    【解决方案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

    【讨论】:

    • 谢谢。你能解释一下 sym() 和 parse_exp() 有什么区别吗?从所提到的讨论中不清楚。
    • 您应该将其作为一个新问题提出,以便其他有相同问题的人在搜索时可以找到它。但简而言之,sym("a-b") 创建了一个符号`a-b`,在`a-b` &lt;- 5 的意义上。
    猜你喜欢
    • 2020-07-12
    • 2018-10-10
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2019-07-12
    相关资源
    最近更新 更多