17.4 包目录结构

创建一个包基本上就是要把正确的文件放在正确的地方。在你的包目录下,有两个文件是必须的:

  • DESCRIPTION包含了有关包的版本、作者及其用途。
  • NAMESPACE说明哪些函数将被输出(给用户) 。

其他三个文件是可选的:

  • LICENSE(或LICENCE,这取决于你站在哪个阵营)包含了包的许可证。
  • NEWS即新闻信息,在此你可以记录所有你所做出的、令人激动的更新信息。
  • INDEX包含了包中所有有趣的东西的名称和描述。

如果你对要编写所有的五个管理文件感到焦虑,请先深呼吸一下。其实NAMESPACEINDEX完全是自动生成的,而DESCRIPTION是部分自动生成的。而且,如果你只使用几种常用且标准的许可,那么就不需要许可证文件了1。

1NEWS非常令人讨厌,你将总是忘记更新它。

在顶层必须包含两个目录:

  • R目录包含你的R程序。
  • man目录包含了帮助文件。

还有一些可选的目录:

  • src包含C、C++或Fortran的源代码。
  • demo包含可由R的demo函数运行的演示代码。
  • vignettes包含较长的文档,它将解释如何使用该程序包,这可以通过browseVignettes来查到。
  • doc中包含其他格式的帮助文件。
  • data包含数据文件。
  • inst包含其他的任何东西。

第一个可选的目录已经超出了本节关于快速创建包的范围。在三种编译语言中,C++最容易和R一起使用,这要归功于Rcpp包(参见Dir Eddelbuettel的Seanless R and C++ Integration with RCpp)。创建Vignettes并不难,特别是如果你使用了knitr包(请阅读Yihui Xie的Dynamic Documents with R and Knitr) 。

data文件可以通过data函数得到的文件(正如我们在12.2节所看到的)。它们的首选格式是.RData文件,即调用save的结果,虽然其他格式也是可以的。

虽然inst是一个可以包含任何东西的文件夹,但它也可以包含一些标准的内容:

  • inst/test含有你的RUnittestthat测试。
  • inst/python、inst/matlab和inst/someotherscriptinglanguage包含其他脚本语言代码。 (三种已经支持的编译语言则位于src目录下,如前所述)。
  • 你可以在CITATION文件中描述希望包如何被引用,虽然这些信息通常从描述文件中自动生成。