在Python我已經習慣了有我的代碼「的風格,檢查」由自動但可配置工具,稱爲pep8的8th Python enhancement proposal後。任何R風格指南/檢查?
in R我不知道。谷歌有一個style guide,但:
- 大多數R程序員實際使用什麼?
- 我還沒有找到任何執行這些檢查的程序。
德克,亞歷克斯,在你的答案你指出我在漂亮的打印機,但在我看來,將過度一件事情,而不是做一套:代碼會自動修改遵循的風格,而沒有警告是針對選擇不好的標識符而頒發的。
在Python我已經習慣了有我的代碼「的風格,檢查」由自動但可配置工具,稱爲pep8的8th Python enhancement proposal後。任何R風格指南/檢查?
in R我不知道。谷歌有一個style guide,但:
德克,亞歷克斯,在你的答案你指出我在漂亮的打印機,但在我看來,將過度一件事情,而不是做一套:代碼會自動修改遵循的風格,而沒有警告是針對選擇不好的標識符而頒發的。
我認爲,如果你想這樣的工具,你可能不得不自己編寫。原因是R沒有與Python的PEP8等效;也就是從官方上傳下來的「官方風格指南」,大多數R程序員都普遍遵循這種風格。
此外還有很多在R芯本身文體不一致;這是R作爲一種語言演化的結果。例如,R內核中的許多函數遵循foo.bar
的形式,並且在S3對象系統出現之前編寫,並使用該表示法用於方法調度。事後看來,爲了保持一致性和清晰度,可能會改變這些功能的命名,但現在考慮這些功能爲時已晚。
總之,是對R沒有正式的「風格絨」的工具,因爲將R核心本身包含了足夠的風格皮棉,其中沒有什麼可以約來完成,即編寫一個將是非常困難的。對於每一條規則---「不要這樣做」---必須有一長串例外---「除了在這種情況下,這種情況下,這一個,......,在哪裏它是爲了歷史目的而完成的「。
我自己寫的,我已經在考慮它了,要麼通過改變R編譯器,要麼通過調整其他「lint」來與R一起工作,但我知道這是一個巨大的企業。 – mariotomo 2011-02-27 09:11:11
但是,關於R Core中太多的樣式,我沒有看到問題:樣式檢查器會抱怨我定義的*,而不是我使用的*。我不會要求它檢查R核心! :) – mariotomo 2011-02-27 09:13:05
從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
有一個formatR
包tidy.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)
}
至於
什麼做大多數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 :)
lint包提供了有關文體問題的警告,但未對其進行更正。 運行lint()
命令(使用默認參數值)可爲您提供當前目錄中所有R文件的警告列表。
lint軟件包現在已經在CRAN上存檔,並且可以在此時作出回答,這可能意味着它不再是考慮的好選擇。 – makeyourownmaker 2017-03-01 16:28:39
lintr - 突出了可能的語法和風格問題/錯誤
CRAN Task View: Reproducible Research - 格式化工具部分包含其他有用的工具,特別是formatR它可以自動formt代碼。
相關問題: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
另一種可用的樣式指南是[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
這可能很有用:http://cran.r-project.org/web/packages/lint/lint。 pdf – wannymahoots 2014-04-09 12:13:18