【问题标题】:tool to auto-format R code自动格式化 R 代码的工具
【发布时间】:2011-03-02 08:46:21
【问题描述】:

是否有可以自动重新格式化 R 代码的工具(编辑器、脚本等)?它不需要是可定制的,但它必须能够识别由分号或换行符分隔的语句,因为此代码具有两者。如果它可以将所有语句放在单独的行上,一致地缩进代码块并一致地放置大括号,我会非常高兴。

编辑:总结发现

感谢您的精彩回答。这是我发现的。

  • ESS 和 StatET 都是出色的 R 编辑器,在自动缩进代码块方面做得很好。 StatET 允许您一次全选并重新缩进文件中的所有内容。据我所知,ESS 允许您一次缩进整个函数 def,但不能缩进整个文件(如果我错过了,请纠正我)。这些都不会修复大括号的放置或打断多语句行。 (例如:i = n*b;a=i+1)
  • formatR 很棒。除了修复缩进之外,它还会一致地放置大括号并拆分多语句行。

这是我编写的一个小函数,以便我可以转换整个源目录(使用与 formatR 相同的底层函数,奇怪的是在动画包中)。

library("animation")

tidy.all <- function(inDir = NULL, outDir = NULL, ...) {
    if (is.null(inDir) || is.na(outDir)) 
        stop("inDir can't be null or NA")
    if (!file.info(inDir)$isdir) 
        stop("inDir must be a directory")

    if (is.null(outDir) || is.na(outDir)) 
        stop("outDir can't be null or NA")
    if (!file.exists(outDir)) 
        dir.create(outDir)
    if (!file.info(outDir)$isdir) 
        stop("outDir must be a directory")

    for (f in dir(inDir)) {
        currFile <- file.path(inDir, f)
        if (length(grep(".*\\.R$", currFile, perl = T))) {
            outFile <- file.path(outDir, f)
            if (file.exists(outFile)) 
                stop(paste("refusing to overwrite", outFile))

            tidy.source(currFile, file = outFile, ...)
        }
    }
}

【问题讨论】:

  • 我从一开始就写“漂亮的代码”,因为我发现它更容易阅读。我为 Eclipse 使用了 StatET 插件(我尝试过 ESS,但我发现它与 StatET 相当),这对我的工作非常满意。
  • @romunov 是的,我同意,但我必须修改的大部分 R 代码最初并不是由我创建的
  • 基思,说得好。在这种情况下,我发现 formatR 是一个很好的选择(正如您已经发现的那样)。
  • JGR 也进行代码重组

标签: r formatting autoformatting


【解决方案1】:

虽然 ESS 是一个更好的长期解决方案,但如果您只是有一个快速的格式化工作,也许这个包会有所帮助:http://yihui.name/en/?s=formatr

【讨论】:

    【解决方案2】:

    带有 ESS 的 Emacs 做得非常好 -- R Core 推荐的默认设置在 R Internals 手册的 Section 7 R coding standards 中。

    【讨论】:

    • 你在 ess 是怎么做到的?
    • 太棒了。这些是关于设置代码样式的。如果代码有点乱,有没有清理格式的命令?
    • 除非我记错了,ESS 只处理缩进,而不处理其他编码风格问题,例如哪个行括号继续,注释符号前有多少空格,是否在运算符周围放置空格,是否使用 @ 987654323@或&lt;-等。
    【解决方案3】:

    我使用StatET,它对此非常有效。

    您也可以在 CRAN 上尝试the formatR package

    【讨论】:

    • 请问您在 StatET 中是如何做到的?我找不到它的选项。
    【解决方案4】:

    虽然我没用过,或许下面的eclipse插件http://www.walware.de/it/statet/或许能帮上忙。

    【讨论】:

      【解决方案5】:

      您可以在 statET 中使用 ctrl + I 来修复代码的缩进。 但是,可以使用带有代码 sn-ps 的 formatR 包,尤其是通过为其分配热键来产生更好的结果。

      【讨论】:

        【解决方案6】:

        我遇到了同样的问题。 在 R Studio 中重新格式化有一种非常简单的方法: 只需复制所有代码并粘贴到新的R script

        【讨论】:

          猜你喜欢
          • 2013-03-20
          • 1970-01-01
          • 2012-03-13
          • 2012-04-04
          • 2021-08-23
          • 1970-01-01
          • 2011-03-26
          • 1970-01-01
          • 2023-03-29
          相关资源
          最近更新 更多