【问题标题】:Use = instead of <- for assignment when styling R code with styler使用 styler 设置 R 代码样式时,使用 = 而不是 <- 进行赋值
【发布时间】:2018-11-12 14:20:53
【问题描述】:

我喜欢这个包,但我想知道如何改变 tidyverse 风格的一个规则:我想保留“=”而不是“

我已阅读该说明:http://styler.r-lib.org/articles/customizing_styler.html#implementation-details

但我仍然不知道如何简单地更改该规则。 我已经尝试过非常幼稚的:

library(styler)

force_assignment_op  <- function (pd) 
  {
    to_replace <- pd$token == "LEFT_ASSIGN"
    pd$token[to_replace] <- "EQ_ASSIGN"
    pd$text[to_replace] <- "="
    pd
 }


tidyverse_style()$token$force_assignment_op = force_assignment_op

但是得到以下错误:

Error in tidyverse_style()$token$force_assignment_op = 
force_assignment_op : 
  invalid (NULL) left side of assignment

我想以一种以后可以简单地运行样式器插件的方式对其进行修改。

【问题讨论】:

    标签: r tidyverse assignment-operator


    【解决方案1】:

    问题是tidyverse_style()$token是一个列表,不是环境,所以不能修改。 (好吧,你可以修改它,但你修改的是副本,而不是原件。)

    您需要编写自己的函数来替换tidyverse_style 函数,并使用它来代替。例如,假设您保留 force_assignment_op 函数:

    LaSy_style <- function(...) {
      ts <- tidyverse_style(...)
      ts$token$force_assignment_op <- force_assignment_op
      ts
    }
    

    然后

    style_text(c("ab <- 3", "a  <-3"), strict = FALSE, style = LaSy_style)
    

    (来自?tidyverse_style 的示例之一)将打印

    ab = 3
    a  = 3
    

    (这个很难看,原版tidyverse_style更好,但我不会阻止你。)

    【讨论】:

    • 非常感谢!这行得通。现在......你(或任何人?)知道我如何告诉 styler 插件使用 LaSy_style 而不是 tidyverse_style? (呵呵……我知道……这很“丑”,但我很懒;))
    • 我认为它对tidyverse_style 进行了硬编码,因此您要么需要编写自己的插件(这并不难,请参阅rstudio.github.io/rstudioaddins),或者说服styler 作者制作它可配置。
    • 我最近看到有一个fork 为插件实现自定义样式指南。会在某个时候尝试合并回上游,还没有尝试过。你可以使用 remotes 包来安装它。
    • 从 styler 1.1.1 开始,您现在可以使用插件选择样式指南。见github.com/r-lib/styler/releases/tag/v1.1.1
    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2017-09-23
    • 2021-09-25
    相关资源
    最近更新 更多