R代码示例/最佳实践

9

我对R语言很陌生,在网上查找有关撰写R代码的“好”方法的信息时遇到了困难。我阅读了一些基本指南,但一直没有找到确实是最新的信息。

  1. 哪些S3类编写/记录得好?
  2. 相应的S4类如何?
  3. 在注释.R类/函数时,您使用什么常规?您是否将所有注释放入.Rd文件和.R文件中?同步这些文件是否繁琐?
4个回答

7
无论是使用 S3、S4 还是完全不使用包,这主要是一个风格问题(正如 Dirk 所说),但如果您想要拥有非常结构化的对象(就像在任何 OOP 语言中一样),我建议您使用其中之一。例如,所有时间序列类都有时间序列对象(我相信它们全部都是 S3,除了 its),因为它允许它们强制执行围绕这些对象的构建和使用的某些行为。同样,在创建软件包方面的问题上:如果您经常重复使用代码或代码对其他人有用,则最好这样做。这需要一些额外的工作,但添加的组织结构可以轻松弥补成本。
关于 S3 与 S4 (在 R-Help这里这里讨论过) ,基本的指南是,S3 类别更加“快速且随便”,而 S4 类别则对对象和类型施加更加严格的控制。如果你正在处理 Bioconductor ,通常会使用 S4(例如,请参阅 "S4 classes and methods")。我建议阅读以下一些内容:
  1. "S4 简介" by Christophe Genolini
  2. "程序员的专属:使用 S3 和 S4 的简单类" by Thomas Lumley
  3. "Brobdingnag: 使用 S4 方法的 ''hello world'' 包" by Robin K. S. Hankin
  4. "将包转换为 S4" by Douglas Bates
  5. "S4 方法的工作原理" by John Chambers

对于文档,Hadley的建议很好:Roxygen会使生活更轻松,并将文档放在代码旁边。 除此之外,您可能仍然希望在代码中提供其他注释,超出 Roxygen或man文件所需的范围,这种情况下,为其他开发人员注释代码是一个好习惯。 这些注释不会出现在您的软件包中;它们只会在源代码中可见。


非常感谢你,Shane。很多内容都证实了我之前的阅读,而且这些链接集中在一起非常有帮助。 - Bob Albright

5

这是一个打包了数个问题的复杂问题,答案难以确定。

那么我们从内而外来解决吧:首先尝试解决你的RODBC包装器问题。一种代码表示将会被建议出来。我会从简单的函数开始,然后或许在它周围构建一个包。这已经给你带来了一些封装。

大部分剩下的都是风格问题。一些著名的R代码推崇S4,而另外一些则不赞同。您可以阅读他人的包及在R本身中进行编码。并且您始终可以用不同的方式重新实现RODBC包装器,并比较自己的方法。

编辑:根据您更新和缩短的问题:从CRAN中选择一些包,特别是您使用的包。我认为您很快就会根据自己的风格找到一些更或多或少有趣的包。


你说得很对。我已经删除了我的问题的后半部分。非常抱歉,谢谢。 - Bob Albright
我认为应该更加专注地修改问题本身:不要使用“R代码示例/最佳实践”,而是改成类似于“R:何时使用S3或S4类?”这样会更容易管理。 - Shane

5

第三步,使用roxygen - 它的工作方式类似于javadoc,可以获取源文件中的注释并构建Rd文件。


4

谷歌的R语言风格指南(Google R style guide),更注重代码的风格而非实质内容,但是阅读一下仍然是值得的。


确实如此。它似乎现在在这里 - pleonasmik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接