r - 自动格式化 R 代码的工具

是否有可以自动重新格式化 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, ...)
        }
    }
}

最佳答案

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

https://stackoverflow.com/questions/3017877/

相关文章:

c# - 对混合数字和字符串进行排序

formatting - Go 语言中的打印格式列表

c# - 在单个键盘快捷键中使用 R# 重新格式化代码

r - 用适当的精度数字校正R中的“摘要”

ruby-on-rails - 在 Ruby 中将换行符解释为 markdown(Github Ma

python - 将文本列表格式化为列

c - printf 格式(%d 与 %u)

python - 格式化复数

linux - 如何在 unix/linux 中显示 'ls -l' 命令的列标题?

java - 打印出数组中的元素,元素之间使用逗号