首先学习R包源代码,以研究编写自己的包


47

我打算开始编写R包。

我认为最好学习现有软件包的源代码,以了解软件包构造的约定。

我学习优质课程的标准:

  • 简单的统计/技术思想:重点是学习包装构造的机理。了解该程序包不要求有关该程序包实际主题的详细的高度特定领域的知识。
  • 简单和常规的编码风格:我在寻找的东西不止于此,Hello World而不仅仅是更多。第一次学习R软件包时,特质的技巧和黑客会分心。
  • 良好的编码风格:编写良好的代码。通常,它揭示了对良好编码的理解以及对R中编码约定的认识。

问题:

  • 哪些套餐适合学习?
  • 为什么相对于上述标准或任何其他可能相关的标准,建议的软件包源代码对于研究起来很好?

更新(13/12/2010) 根据Dirk的评论,我想明确地说,毫无疑问,许多软件包都应该适合初学者。我也同意,软件包将提供用于不同事物的模型(例如,小插图,S3类,S4类,单元测试,Roxygen等)。尽管如此,阅读有关开始时使用好的软件包的具体建议以及为什么它们是开始时使用好的软件包的原因将很有趣。

我还更新了上面的问题,以指代“包装”而不是“包装”。


2
另一种看待这种情况的方法是寻找特定的软件包作者;某些作者非常擅长遵循最佳实践并编写清晰的代码,在这种情况下,您可以学习他们的所有材料。
Shane 2010年

1
@Shane好点。对于初次学习编写软件包的哪些软件包作者可能有什么好的建议?
Jeromy Anglim 2010年

Answers:


15

我建议您出于以下原因查看动物园套餐:

  1. 它有几个写得很好的小插曲;
  2. 它使用一个命名空间使用useDynLibimportexport,和S3method;
  3. 它使用了多个单元测试RUnit
  4. 它提供了有关如何创建/记录S3方法的良好示例;
  5. 它通过.Call接口对C代码进行了一些调用。
  6. 它包含(绘图)演示;
  7. 它旨在与核心R安装保持一致(例如,功能类似,不掩盖/覆盖基本功能等)

它不使用氧气,这非常方便,但是8分之7还不错。;-)

回应您的条件:

  1. 这个概念很简单:zoo是由某些东西排序的矩阵式类。无需特定领域的知识。
  2. zoo 确实确实有一些特殊的编码约定,但是没有什么妨碍理解代码的。
  3. zoo 目的是尽可能与R保持一致。

1
在哪里可以找到这个包裹?
亚当SA 2010年

@Adam:我在回答中添加了一个指向动物园的链接。该页面还有指向Zoo的R-forge项目页面的链接。
Joshua Ulrich 2010年

9

我不认为自己是成熟的R软件包开发人员,但是最近经历了为我的工作环境编写和维护软件包的过程。

我以前一直在编写/维护/更新一组脚本,这些脚本将通过该source()函数从一个项目传递到另一个项目。最终的结果是,我最终会在网络驱动器的各个位置挂出大部分多余的脚本。目前还不清楚最新脚本集位于何处。从那以后,我开始迁移使用roxygen编写/维护程序包。它极大地简化了我的生活,并使与同事共享我的工作变得更加容易。

根据上述条件,我建议您阅读Hadley编写的软件包。特别是,我认为通读devtools Wiki将非常有帮助。哈德利(Hadley)的代码有据可查,他的一些软件包都使用了roxygen。我认为为R函数和R文档编写和维护一个文档比将它们拆分到两个位置(.R和.RD文件)要容易得多。

Hadley的软件包还提供了一些相当基本的概念,并且如果您正在寻找有关技术方面的想法的指针,则相对较容易删除(imho)。当我寻找有关roxygen文档或其他基本任务的指针时,我发现自己在遍历plyr源代码。


谢谢。特别是devtools Wiki,有很多很棒的主意。
Jeromy Anglim

@Jeromy-阅读了您最近关于可重复性研究等的文章(对您有帮助的uber uber,谢谢!)意味着您将很快接触到roxygen。我还应该提到Eclipse支持roxygen语法,并使其非常容易过渡。我要克服的最困难的任务是编写有用且高效的小插图。我想您从这个角度出发要比我高得多。
大通

2
只是不阅读ggplot2源代码。它会使您的大脑流血
hadley 2011年

多么诚实的R开发人员!
Leo5188

7

为什么不采用经验驱动的随机抽样方法呢?只需挑选一些,看看哪个适合您。

顺便说一句,只是看看您自己使用并熟悉的一些软件包。下载它们很容易,或者,如果您愿意,也可以通过R-Forge,RForge或Github上的Web界面查看它们。

您很可能最终会获得针对不同想法的不同软件包。例如,某些插图可能会帮助您整合它们。有些可能有助于编译代码。或单元测试。或Roxygen。它们大约有2600个,那么为什么会痴迷于一个最好的呢?


好点。我打算自己探索。当然,探索只是乐趣的一半。我同意不同的软件包可以教不同的东西。我同意许多软件包将是一个很好的起点。我将更新我的问题,以反映多个软件包将满足条件的想法。但是,提出一些具体建议可能会节省自己和其他一些R包新手。我还认为,出于学习目的,R包的成熟开发人员可以更好地评论给定包的优点。
Jeromy Anglim 2010年

2
因为您需要从某个地方开始:)
hans0l0 2011年

2

另一条建议可能是查看您所依赖的软件包或与之交互的软件包,尤其是如果这些软件包实现了约书亚·乌尔里希(Joshua Ulrich)提到的某些项目 或由著名作者编写的项目。了解您在现场的工作方式,以确保某些兼容性可能会有所帮助。人们通常会考虑某些问题,阅读他们的解决方案的帮助会有所帮助。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.