Подтвердить что ты не робот

Инструмент для автоматического форматирования R-кода

Есть ли какой-нибудь инструмент (редактор, 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, ...)
        }
    }
}
4b9b3361

Ответ 1

Хотя ESS является гораздо лучшим долгосрочным решением, если у вас есть простое задание форматирования, возможно, этот пакет поможет: http://yihui.name/en/?s=formatr.

Ответ 3

Я использую StatET, и для этого он работает довольно хорошо.

Вы также можете попробовать пакет formatR в CRAN.

Ответ 4

Хотя я никогда не использовал его, возможно, может помочь следующий плагин eclipse http://www.walware.de/it/statet/.

Ответ 5

Вы можете использовать ctrl + я в statET, чтобы исправить отступ вашего кода. Однако можно использовать пакет formatR с фрагментами кода, которые генерируют лучший результат, в частности, назначая ему горячую клавишу.

Ответ 6

У меня такая же проблема. Существует действительно ЛЕГКИЙ способ переформатирования в R Studio: просто скопируйте весь код и вставьте новый R script