任何R风格指南/检查?

时间:2011-02-25 12:43:08

标签: r

Python中的

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

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

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

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

7 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分:11)

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

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

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

答案 2 :(得分: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:)

答案 3 :(得分:4)

lint包提供有关样式问题的警告,而不对其进行更正。 运行lint()命令(使用默认参数值)会为您提供当前目录中所有R文件的警告列表。

答案 4 :(得分:4)

答案 5 :(得分:2)

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

styler转换您的代码库以匹配给定的样式 - 默认值与here描述的tidyverse样式相匹配。它修改了对齐和一些语法(&lt; - over =)。但是,它不会重命名变量或类似的东西。

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

答案 6 :(得分:0)

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

enter image description here