Любой R-стиль руководства/проверки?
в Python Я привык к тому, что мой код "проверял стиль" с помощью автоматического, но настраиваемого инструмента, называемого pep8, после 8-е предложение по улучшению Python.
в R я не знаю. Google имеет руководство по стилю, но:
- Что на самом деле используют большинство программистов R?
- Я все еще не нашел программу, которая выполняет эти проверки.
Dirk, Alex, в ваших ответах вы указали мне на симпатичные принтеры, но, на мой взгляд, это переусердствовало бы одно, а не делать другое: код будет автоматически отредактирован, чтобы следовать стилю, в то время как предупреждения для слабо выбранных идентификаторов.
Ответы
Ответ 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