任何R风格指南/检查?

问题描述 投票:25回答:7

在Python中,我习惯于在pep8之后通过一个名为8th Python enhancement proposal的自动但可配置的工具对我的代码进行“样式检查”。

在R我不知道。谷歌有一个style guide,但是:

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

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

r
7个回答
11
投票

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

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

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


21
投票

有一个formatR包与tidy.source功能。我使用Emacs和ESS,并关注Hadley's style recommendations。将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)
}

6
投票

至于

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

我怀疑很多人跟随R Core有R Coding standards section in the R Internals manual

从广义上讲,这些敏感的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漂亮的打印机可能确实是最接近的。或者只是使用ESS :)


4
投票

lint包提供有关风格问题的警告,而不纠正这些问题。运行lint()命令(使用默认参数值)会为您提供当前目录中所有R文件的警告列表。


4
投票

2
投票

在我检查任何版本控制之前,我使用styler然后使用lintr

styler转换你的代码库以匹配给定的样式 - 默认匹配描述here的tidyverse样式。它修改了对齐和一些语法(

lintr是不修改的。它只标识与您的样式指南不一致的代码行。当我在一个包或项目上工作时,我在vim中使用它来识别需要更多人工输入来修复的东西(重命名变量/函数等)


0
投票

RStudio在过去的某个时刻添加了一个样式检查器。例如,在1.1.463版中,您可以在“常规选项”下启用该功能。这是一个截图:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.