自动格式化R代码的工具

Kei*_*ith 17 formatting r autoformatting

有没有可以自动重新格式化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, ...)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

jve*_*ani 9

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


Dir*_*tel 7

带有ESS的Emacs 非常出色 - R Core推荐的默认设置在R Internals手册的第7节R编码标准中.


Sha*_*ane 6

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

您也可以在CRAN上尝试formatR包.