【问题标题】:Tidying text in a way compatible with tidy evaluation以与 tidy 评估兼容的方式整理文本
【发布时间】:2018-01-30 06:39:18
【问题描述】:

我想以符合整洁评估的方式整理源代码。不幸的是,formatR 没有保留 !! 运算符。

formatR::tidy_source(text = "!!little_b", output = FALSE)$text.tidy
## [1] "!(!little_b)"

来自Yihui's formatR guide 的第 7 节,

简而言之,tidy_source(text = code) 基本上就是 deparse(parse(text = code))...

但是当我调用deparse(parse(text = code)) 时,文本无法使用。实际行为:

deparse(parse(text = "1+!!x"))
## [1] "structure(expression(1 + (!(!x))), srcfile = <environment>, wholeSrcref = structure(c(1L, "
## [2] "0L, 2L, 0L, 0L, 0L, 1L, 2L), srcfile = <environment>, class = \"srcref\"))" 

想要的结果是整齐的文字:

"1 + !!x

这里的解决方案可能会解决https://github.com/ropensci/drake/issues/200

【问题讨论】:

    标签: r tidyverse tidyr tidyeval formatr


    【解决方案1】:

    要解决此解析器问题,您可以提供函数形式:

    formatR::tidy_source(text = "`!!`(little_b)", output = FALSE)$text.tidy
    

    请注意,您需要 rlang 0.2.0,它很快就会出现在 CRAN 上。

    我们一直在开发自己的解析器,将来可能会在 formatR 中使用,例如rlang::expr_deparse()。我们还将尝试看看 R 核心是否会接受基本解析器的补丁,以避免这种不必要的括号包裹。

    还可以查看应立即处理!!styler 包。它现在是格式化 R 代码的首选包,并且非常可配置。

    【讨论】:

      猜你喜欢
      • 2017-12-21
      • 2019-07-02
      • 1970-01-01
      • 2015-05-29
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 2017-10-18
      相关资源
      最近更新 更多