любое руководство по стилю R? - PullRequest
26 голосов
/ 25 февраля 2011

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

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

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

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

Ответы [ 7 ]

21 голосов
/ 25 февраля 2011

Существует пакет formatR с функцией tidy.source.Я использую Emacs с ESS и следую рекомендациям стиля Хэдли .Трудно сравнить R с Python, поскольку стиль в Python является обязательным, в отличие от R.простая демонстрация:

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)
}
11 голосов
/ 26 февраля 2011

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

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

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

6 голосов
/ 25 февраля 2011

Что касается

что на самом деле используют большинство программистов на 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 голосов
/ 09 февраля 2017
4 голосов
/ 02 июля 2014

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

2 голосов
/ 13 февраля 2018

Я использую Styler , а затем lintr , прежде чем проверять что-либо в управлении версиями.

styler преобразует базу кода в соответствии с заданным стилем - по умолчаниюсоответствует стилю, описанному здесь .Он изменяет выравнивания и некоторый синтаксис (<- over =).Но он не переименовывает переменные или что-то в этом роде. </p>

lintr не модифицируется.Он просто определяет строки кода, которые не соответствуют вашему руководству по стилю.Я использую это в vim, когда я работаю над пакетом или проектом, чтобы определить вещи, которые нужно исправить чуть-чуть человечески (переименование переменных / функций и т. Д.)

0 голосов
/ 14 февраля 2019

RStudio добавила проверку стиля в некоторый момент в прошлом. Например, в версии 1.1.463 вы можете включить эту функцию в разделе «Общие параметры». Вот скриншот:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...