先学习R包源码,准备写自己的包

机器算法验证 r
2022-01-28 10:39:43

我打算开始编写 R 包。

我认为研究现有包的源代码以了解包构造的约定会很好。

我学习好包的标准:

  • 简单的统计/技术思想:重点是了解包装构造的机制。理解包不需要关于包的实际主题的详细的高度特定领域的知识。
  • 简单而传统的编码风格:我正在寻找更多Hello World但不是更多的东西。第一次学习 R 包时,特殊的技巧和技巧会分散注意力。
  • 良好的编码风格:代码写得很好。总的来说,它揭示了对良好编码的理解,以及对 R 中编码约定的认识。

问题:

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

更新(2010 年 13 月 12 日) 在 Dirk 的评论之后,我想明确一点,毫无疑问,首先学习许多软件包是很好的。我也同意包将为不同的事物提供模型(例如,小插图、S3 类、S4 类、单元测试、Roxygen 等)。尽管如此,阅读关于好的包开始的具体建议以及它们将成为好的包开始的原因会很有趣。

我还更新了上面的问题以引用“包”而不是“包”。

4个回答

我建议查看zoo包,原因如下:

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

它不使用 roxygen,这非常方便,但 8 个中有 7 个还不错。;-)

回应您的标准:

  1. 这个概念很简单:zoo是一个类似矩阵的类,由something排序。不需要特定领域的知识。
  2. zoo似乎确实有一些特殊的编码约定,但没有任何多余的东西可以阻止理解代码。
  3. zoo旨在尽可能与 R 保持一致。

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

我以前一直在编写/维护/更新一组脚本,我将通过该source()函数从一个项目传递到另一个项目。这样做的最终结果是,我最终会在我们的网络驱动器的各个地方挂出大部分冗余脚本。永远不清楚最新的脚本集在哪里。从那以后,我开始使用 roxygen 编写/维护一个包。它极大地简化了我的生活,让我更容易与同事分享我的工作。

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

如果您正在寻找有关技术方面想法的指针,Hadley 的包还提供了一些相当基本的概念,并且相对容易解析(恕我直言)。当我在寻找有关 roxygen 文档或其他基本任务的指针时,我发现自己在挖掘plyr源代码。

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

开个玩笑,看看你自己使用和熟悉的几个包。下载它们很容易,或者如果您愿意,也可以通过 R-Forge、RForge 或 Github 上的 Web 界面查看它们。

您很可能最终会为不同的想法提供不同的软件包。有些可能会帮助您了解他们整合的方式,例如小插曲。有些可能有助于编译代码。或者单元测试。或Roxygen。大约有 2600 个,那么为什么要痴迷于一个最好的呢?

另一个建议可能是查看您的软件包将依赖或与之交互,特别是如果这些实现了Joshua Ulrich提到的或由知名作者编写的某些项目。 了解您所在领域的工作方式可能会有所帮助,以确保一些兼容性。人们通常会考虑某些问题并阅读他们的解决方案可能会有所帮助。