2009-12-15 105 views
9

我是R新手,很難拼湊來自各種來源的信息,這些信息來源於與編寫R代碼的「良好」實踐相關的各種信息。我已閱讀過基本指南,但我一直在很難找到絕對是最新的信息。R代碼示例/最佳實踐

  1. 什麼是一些寫得很好的/有記錄的S3類的例子?
  2. 相應的S4班怎麼樣?
  3. 評論.R類/函數時使用了哪些約定?你是否將所有的註釋都放在.Rd文件和.R文件中?這些文件的同步是否令人厭煩?

回答

7

無論是使用S3,S4還是一個包都是一個樣式問題(正如Dirk所說的),但是如果你想要有一個結構良好的對象,我會建議使用其中的一個(就像你以任何OOP語言)。例如,所有的時間序列類都有時間序列對象(我相信它們都是S3,除外),因爲它允許它們在構建和使用這些對象時執行某些行爲。與創建軟件包的問題類似:如果您經常重新使用代碼或者代碼對其他人有用,那麼這樣做是個好主意。它需要多一點努力,但增加的組織結構可以輕鬆彌補成本。

關於S3與S4(在R-幫助herehere討論),基本準則是S3類是更「快速和骯髒」而S4類放置在對象和類型更剛性控制。如果您正在使用Bioconductor,通常會使用S4(請參閱,例如,"S4 classes and methods")。

我會建議你閱讀以下一些:

  1. "A (Not So) Short Introduction to S4" by Christophe Genolini
  2. "Programmers' niche: A simple class, in S3 and S4" by Thomas Lumley
  3. "Brobdingnag: a ''hello world'' package using S4 methods" by Robin K. S. Hankin
  4. "Converting packages to S4" by Douglas Bates
  5. "How S4 Methods Work" by John Chambers

對於文檔,哈德利的建議是現貨:Roxygen將使生活更輕鬆,並將文檔放在代碼旁邊。除此之外,您可能仍然希望在您的代碼之外提供其他評論,超越 Roxygen或man文件需要的內容,在這種情況下,爲其他開發人員評論您的代碼是一種很好的做法。這些評論不會在你的軟件包中結束;它們只會在源代碼中可見。

+0

感謝Shane。這很多證實了我一直在閱讀的內容,並且在一個地方的鏈接非常有幫助。 – 2009-12-15 18:03:34

5

這是六個或更多的問題捆綁成一個,這使得難以回答。

所以我們試試從內到外:首先嚐試解決您的RODBC包裝問題。一個代碼表示將表明自己。我會從簡單的功能開始,然後可能圍繞它創建一個包。這已經給你一些封裝。

其餘大部分都是風格。一些突出的R代碼發誓S4,而其他人發誓。您可以隨時閱讀其他人的軟件包以及R本身的代碼。你可以通過不同的方式重新實現你的RODBC包裝,並比較你自己的方法。

編輯:反映你更新和大大縮短問題:從CRAN中選擇一些軟件包,尤其是那些你使用的軟件包。根據你的風格,我認爲你會很快找到一些或多或少有趣的東西。

+0

你說得很對。我已經刪除了我的問題的後半部分。對不起,謝謝。 – 2009-12-15 13:26:39

+0

我認爲要改變問題本身更專注:而不是「R代碼示例/最佳實踐」使它像「R:何時使用S3或S4類?」;這將更容易管理。 – Shane 2009-12-15 14:04:26

5

對於3.使用roxygen - 它像javadoc一樣在源文件中進行註釋並構建Rd文件。

+0

謝謝哈德利,這正是我一直在尋找的。 – 2009-12-15 17:55:18

4

有點比物質更有風格,但Google R style guide值得一讀:

+0

它確實如此。現在好像是[這裏](https://google.github.io/styleguide/Rguide.xml) – pleonasmik 2017-03-06 16:47:14