Есть ли какой-нибудь инструмент (редактор, script, любой...), который может автоматически переформатировать R-код? Его не нужно настраивать, но он должен иметь возможность распознавать утверждения, разделенные точкой с запятой или символами новой строки, поскольку этот код имеет оба. Если он может поместить все утверждения в отдельную строку, последовательно отступать кодовые блоки и последовательно размещать фигурные скобки, я буду очень рад.
Изменить: обобщение результатов
Спасибо за отличные ответы. Вот что я нашел.
- Как ESS, так и StatET являются отличными редакторами R и прекрасно выполняют автоматические отступы блоков кода. StatET позволяет вам выбирать все и повторно вставлять все в файл за один раз. Из того, что я мог сказать, ESS позволяет вам сразу отступать целую функцию def, но не весь файл (пожалуйста, поправьте меня, если я пропустил это). Ни один из них не будет исправлять размещение скобок или разбить строки с несколькими заявлениями. (Например: я = n * b; a = я + 1)
- formatR потрясающе. Помимо исправления отступов, он также будет последовательно размещать фигурные скобки и разделять строки с несколькими операторами.
Вот небольшая функция, которую я написал, чтобы я мог конвертировать весь исходный каталог (используя ту же базовую функцию, что и форматR, которая странно в пакете анимации).
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, ...)
}
}
}