2009-12-15 103 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