有没有可以自动重新格式化R代码的工具(编辑器、脚本或其他...)可用?它不需要是可定制的,但必须能够识别由分号或换行符分隔的语句,因为此代码两者都有。如果它可以将所有语句放在单独的一行上,一致地缩进代码块,并一致地放置大括号,我会非常高兴。
编辑:总结结果
感谢大家的回答。以下是我的发现。
- ESS和StatET都是很好的R编辑器,可以很好地自动缩进代码块。 StatET允许您选择全部并一次性重新缩进文件中的所有内容。据我所知,ESS允许您一次缩进整个函数定义,但不能缩进整个文件(如果我错了,请纠正我)。这两种方法都无法修复大括号的位置或分割多语句行。(例如:i = n*b; a=i+1) - formatR很棒。除了修复缩进外,它还会一致地放置大括号并拆分多语句行。
以下是我编写的一个小函数,以便我可以转换整个源目录(使用与formatR相同的基础函数,该函数奇怪地位于animation包中)。
编辑:总结结果
感谢大家的回答。以下是我的发现。
- ESS和StatET都是很好的R编辑器,可以很好地自动缩进代码块。 StatET允许您选择全部并一次性重新缩进文件中的所有内容。据我所知,ESS允许您一次缩进整个函数定义,但不能缩进整个文件(如果我错了,请纠正我)。这两种方法都无法修复大括号的位置或分割多语句行。(例如:i = n*b; a=i+1) - formatR很棒。除了修复缩进外,它还会一致地放置大括号并拆分多语句行。
以下是我编写的一个小函数,以便我可以转换整个源目录(使用与formatR相同的基础函数,该函数奇怪地位于animation包中)。
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, ...)
}
}
}