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

Любой R-стиль руководства/проверки?

в Python Я привык к тому, что мой код "проверял стиль" с помощью автоматического, но настраиваемого инструмента, называемого pep8, после 8-е предложение по улучшению Python.

в R я не знаю. Google имеет руководство по стилю, но:

  • Что на самом деле используют большинство программистов R?
  • Я все еще не нашел программу, которая выполняет эти проверки.

Dirk, Alex, в ваших ответах вы указали мне на симпатичные принтеры, но, на мой взгляд, это переусердствовало бы одно, а не делать другое: код будет автоматически отредактирован, чтобы следовать стилю, в то время как предупреждения для слабо выбранных идентификаторов.

4b9b3361

Ответ 1

Я думаю, что если вы хотите такой инструмент, вам, возможно, придется написать его самостоятельно. Причина в том, что R не имеет эквивалента Python PEP8; то есть "официальное руководство по стилю", которое было передано сверху, и за ним следуют большинство программистов R.

Кроме того, существует много стилистических несоответствий в самом ядре R; это является следствием того, как R развился как язык. Например, многие функции в ядре R следуют форме foo.bar и были написаны до того, как появилась система объектов S3 и использовала эту нотацию для отправки метода. Оглядываясь назад, назначение этих функций, вероятно, должно быть изменено в интересах согласованности и ясности, но уже слишком поздно это считать.

Таким образом, для R нет официального инструмента "стиль-линт", потому что сам R-Core содержит достаточное количество стилей, о котором ничего нельзя сделать, что писать было бы очень сложно. Для каждого правила --- "не делайте этого" --- должен быть длинный список исключений --- "кроме этого случая, и этот случай, и этот, и..., где он было сделано для исторических целей".

Ответ 2

Есть пакет formatR с функцией tidy.source. Я использую Emacs с ESS и следую рекомендациям Hadley style. Трудно сравнивать R с Python, поскольку стиль является своего рода обязательным в Python, в отличие от R. =)

EDIT
простая демонстрация:

code <- "fn <- function(x, y) { paste(x, '+', y, '-', x+y) }"
tidy.source(text = code)
## not run
fn <- function(x, y) {
    paste(x, "+", y, "-", x + y)
}

Ответ 3

Что касается

что большинство программистов R фактически используют

Я подозреваю, что многие люди следуют R Core, у которых есть R Раздел стандартов кодирования в руководстве R Internals.

Что в большом смысле относится к этим разумным настройкам Emacs, которые будут использоваться вместе с ESS. Вот что я использую, и оно минимально изменено:

;;; C
(add-hook 'c-mode-hook
          ;;(lambda () (c-set-style "bsd")))
          ;;(lambda () (c-set-style "user"))) ; edd or maybe c++ ?
          (lambda () (c-set-style "c++"))) ; edd or maybe c++ ?
;;;; ESS
(add-hook 'ess-mode-hook
          (lambda ()
            (ess-set-style 'C++)
        ;; Because
            ;;                                 DEF GNU BSD K&R C++
            ;; ess-indent-level                  2   2   8   5   4
            ;; ess-continued-statement-offset    2   2   8   5   4
            ;; ess-brace-offset                  0   0  -8  -5  -4
            ;; ess-arg-function-offset           2   4   0   0   0
            ;; ess-expression-offset             4   2   8   5   4
            ;; ess-else-offset                   0   0   0   0   0
            ;; ess-close-brace-offset            0   0   0   0   0
            (add-hook 'local-write-file-hooks
                      (lambda ()
                        (ess-nuke-trailing-whitespace)))))
(setq ess-nuke-trailing-whitespace-p t)

Что касается общего, инструмент Xihui formatR pretty-printer действительно может быть самым близким. Или просто используйте ESS:)

Ответ 4

Пакет lint дает предупреждения о стилистических проблемах, не исправляя их. Выполнение команды lint() (используя значения параметров по умолчанию) дает вам список предупреждений для всех R файлов в текущем каталоге.

Ответ 5

  • lintr - выделяет возможные синтаксис и проблемы стиля/ошибки

  • CRAN Task View: Воспроизводимые исследования - Раздел "Инструменты форматирования" содержит другие полезные инструменты, в частности formatR, который может автоматически формировать код.