自动格式化R代码的工具

时间:2010-06-10 19:45:04

标签: r formatting autoformatting

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

编辑:总结调查结果

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

  • ESS和StatET都是优秀的编辑器,并且可以很好地自动缩进代码块。 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, ...)
        }
    }
}

6 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:7)

使用ESS的Emacs 非常好 - 并且R Core推荐的默认设置位于Section 7 R coding standards手册的R Internals

答案 2 :(得分:6)

我使用StatET,它的效果非常好。

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

答案 3 :(得分:2)

虽然我从未使用它,但也许以下的eclipse插件http://www.walware.de/it/statet/可能会有所帮助。

答案 4 :(得分:0)

您可以在statET中使用ctrl + I来修复代码的缩进。 但是,可以将formatR包与代码片段一起使用,从而产生更好的结果,特别是通过为其分配热键。

答案 5 :(得分:-1)

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