【发布时间】: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