2011-02-25 67 views
22

在Python我已經習慣了有我的代碼「的風格,檢查」由自動但可配置工具,稱爲pep88th Python enhancement proposal後。任何R風格指南/檢查?

in R我不知道。谷歌有一個style guide,但:

  • 大多數R程序員實際使用什麼?
  • 我還沒有找到任何執行這些檢查的程序。

德克,亞歷克斯,在你的答案你指出我在漂亮的打印機,但在我看來,將過度一件事情,而不是做一套:代碼會自動修改遵循的風格,而沒有警告是針對選擇不好的標識符而頒發的。

+0

相關問題:http://stackoverflow.com/questions/4406873/coding-practice-in-r-what-are-the-the-the-advantages-and-advantages-of-different-sty – 2011-02-25 13:28:31

+0

另一種可用的樣式指南是[Henrik Bengtsson's](https://docs.google.com /document/preview?id=1esDVxyWvH8AsX-VJa-8oqWaHLs4stGlIbk8kLc5VlII&pli=1#heading=h.f456284e7686)。一個規範的會很好,但是沒有一個(現有的分歧很多) – naught101 2012-05-29 13:17:29

+2

這可能很有用:http://cran.r-project.org/web/packages/lint/lint。 pdf – wannymahoots 2014-04-09 12:13:18

回答

10

我認爲,如果你想這樣的工具,你可能不得不自己編寫。原因是R沒有與Python的PEP8等效;也就是從官方上傳下來的「官方風格指南」,大多數R程序員都普遍遵循這種風格。

此外還有很多在R芯本身文體不一致;這是R作爲一種語言演化的結果。例如,R內核中的許多函數遵循foo.bar的形式,並且在S3對象系統出現之前編寫,並使用該表示法用於方法調度。事後看來,爲了保持一致性和清晰度,可能會改變這些功能的命名,但現在考慮這些功能爲時已晚。

總之,是對R沒有正式的「風格絨」的工具,因爲將R核心本身包含了足夠的風格皮棉,其中沒有什麼可以約來完成,即編寫一個將是非常困難的。對於每一條規則---「不要這樣做」---必須有一長串例外---「除了在這種情況下,這種情況下,這一個,......,在哪裏它是爲了歷史目的而完成的「。

+0

我自己寫的,我已經在考慮它了,要麼通過改變R編譯器,要麼通過調整其他「lint」來與R一起工作,但我知道這是一個巨大的企業。 – mariotomo 2011-02-27 09:11:11

+1

但是,關於R Core中太多的樣式,我沒有看到問題:樣式檢查器會抱怨我定義的*,而不是我使用的*。我不會要求它檢查R核心! :) – mariotomo 2011-02-27 09:13:05

+0

從lint的wikipedia頁面開始,我偶然發現了[Yasca](http://en.wikipedia.org/wiki/Yasca)。關於[插件](http://www.scovetta.com/yasca/creating-a-plugin.html)呢? – mariotomo 2011-02-27 10:30:33

20

有一個formatRtidy.source功能。我使用Emacs和ESS,並遵循Hadley's style recommendations。很難R 2與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) 
} 
+2

對於您以某種方式繼承的格式不正確的代碼看起來很有用。但我正在尋找不同的東西,這只是告訴我我沒有遵循某種風格,而讓我完成任務(或不是)。 – mariotomo 2011-02-26 09:16:07

+0

我不確定是否有這樣的工具,但感謝您給我一個網絡應用程序的想法。 =) – aL3xa 2011-02-26 11:44:02

+0

爲什麼一個「網絡應用程序」?無論如何,如果你使用GPL並在公共存儲庫中保存源代碼,我會對開發過程感興趣! – mariotomo 2011-03-04 10:53:25

5

至於

什麼做大多數R程序員實際使用

我懷疑有不少人跟着R核心誰有一個 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) 

至於一般的,工具錫惠公園的formatR漂亮的打印機可能確實是最接近的。或者只是使用ESS :)

+4

哇。 R編碼標準說接近*沒有*關於風格? – mariotomo 2011-02-26 09:11:33

+0

對於那些沒有使用emacs-fu的應用程序,我們應該在最後的代碼塊中查看哪些內容? K&R列是否指示R中的縮進應該是5個空格? – naught101 2012-10-17 06:02:33

+0

不,據我所知,最後一列('C++')被選中。一切都是四肢,我也喜歡其他語言。 – 2012-10-17 11:22:07

4

lint包提供了有關文體問題的警告,但未對其進行更正。 運行lint()命令(使用默認參數值)可爲您提供當前目錄中所有R文件的警告列表。

+1

lint軟件包現在已經在CRAN上存檔,並且可以在此時作出回答,這可能意味着它不再是考慮的好選擇。 – makeyourownmaker 2017-03-01 16:28:39

0

我用styler然後lintr之前我檢查什麼版本控制。

styler將您的代碼庫轉換爲與給定樣式相匹配 - 默認匹配here描述的tidyverse樣式。它修改對齊和一些語法(< - over =)。但是,它不重命名變量或類似的東西。

lintr是不可修改的。它只是識別與您的風格指南不一致的代碼行。我在vim中使用它時,我正在處理一個包或一個項目,以識別需要更多人力輸入來修復(重命名變量/函數等)的東西。