任何R风格指南/检查?

mar*_*omo 26 r

在Python中我习惯于在第8个Python增强提议之后通过一个名为pep8的自动但可配置的工具对我的代码进行"样式检查" .

在RI不知道.谷歌有一个风格指南,但是:

  • 大多数R程序员实际使用了什么?
  • 我仍然没有找到任何执行这些检查的程序.

Dirk,Alex,在你的答案中,你指着我的漂亮的打印机,但在我看来,这将过度一件事而不是另一件事:代码将自动编辑以遵循风格,而没有针对选择不当的标识符发出警告.

aL3*_*3xa 21

有一个功能formatRtidy.source.我将Emacs与ESS一起使用,并遵循Hadley的风格建议.将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)
}
Run Code Online (Sandbox Code Playgroud)

  • 这对于你以某种方式继承的格式错误的代码看起来很有用.但我正在寻找不同的东西,只是告诉我我不遵循一种风格,让我完成任务(或不). (2认同)

Sha*_*pie 11

我想如果你想要这样一个工具,你可能必须自己写.原因是R没有相当于Python的PEP8 ; 也就是说,一个"官方风格指南",从高处流传下来,并且普遍由大多数R程序员遵循.

此外,R核心本身存在很多风格上的不一致; 这是R作为一种语言进化的方式的结果.例如,R core中的许多函数遵循以下形式foo.bar并在S3对象系统出现之前编写,并使用该符号进行方法调度.事后看来,为了保持一致性和清晰度,可能应该更改这些功能的命名,但现在考虑这一点为时已晚.

总之,R没有官方的"样式lint"工具,因为R Core本身包含足够的样式lint,其中没有什么可以做,写一个很难.对于每一条规则---"不要这样做"---必须有一长串例外 - "除非在这种情况下,这个案例,这一个,......,......是出于历史目的".

  • Hadley 的 recs 大部分是 [`lintr`](https://github.com/jimhester/lintr?files=1)。 (2认同)

Dir*_*tel 6

至于

大多数R程序员实际使用了什么

我怀疑很多人跟随R Core,他们R Internals手册中R编码标准部分.

从广义上讲,这些敏感的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)
Run Code Online (Sandbox Code Playgroud)

至于一般情况,工具XihuiformatR漂亮打印机可能确实是最接近的.或者只是使用ESS :)

  • 哇.R编码标准说关于风格接近*没有*? (4认同)

USE*_*R_1 5