17.4 包目录结构
创建一个包基本上就是要把正确的文件放在正确的地方。在你的包目录下,有两个文件是必须的:
- DESCRIPTION包含了有关包的版本、作者及其用途。
- NAMESPACE说明哪些函数将被输出(给用户) 。
其他三个文件是可选的:
- LICENSE(或LICENCE,这取决于你站在哪个阵营)包含了包的许可证。
- NEWS即新闻信息,在此你可以记录所有你所做出的、令人激动的更新信息。
- INDEX包含了包中所有有趣的东西的名称和描述。
如果你对要编写所有的五个管理文件感到焦虑,请先深呼吸一下。其实NAMESPACE和INDEX完全是自动生成的,而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含有你的
RUnit
或testthat
测试。 - inst/python、inst/matlab和inst/someotherscriptinglanguage包含其他脚本语言代码。 (三种已经支持的编译语言则位于src目录下,如前所述)。
- 你可以在CITATION文件中描述希望包如何被引用,虽然这些信息通常从描述文件中自动生成。