本文记录我的首个R程序包MCMI的开发过程。
参考资料
- 两本Hadley Wickham写的书:Advanced R和R Packages。
- Coursera上的课程Mastering Software Development in R Specialization和配套教材Mastering Software Development in R。
感谢开源社区,以上的资料都可以免费获取得到(Coursera课程可以申请补助)。
Preparation
开发R包还需要系统中存在编译工具,编译文档需要LaTeX支持。
另外,请确保以下两个包已安装于系统中:devtools
和roxygen2
。推荐使用RStudio。
Get Started
在RStudio中新建项目,选择R程序包类型即可。建议同时建立Git路径以监控开发流程。
在编写代码之前,先要修改DESCRIPTION文件,要注意的几个地方:
- Package的命名要容易记忆和查询
- Depends指你所用开发环境的R版本
- 慎重选择License
- Imports指你所要调用的其他包,但在代码中,也要明确指出函数所处的包,如
ggplot2::qplot()
Git Workflow
建议在GitHub上为本机申请SSH密钥,并在RStudo->Tools->Global Options->Git/SVN配置好路径,这样在执行git push
时不用再次输入凭据。下面是有关Git的工作流:
- 修改代码/文档
- 编译,测试
- git commit
- git push
- 重复以上循环
RStudio对Git的集成很好,以上三四步操作均可在Git的操作面板里完成。
Code Workflow
- 修改代码
- Build&Reload
- 用命令行测试功能
- 重复以上循环
上述第二步可以在命令行中devtools::load_all()
完成,也可以使用快捷键”Ctrl + Shift + L”,也可以在RStudio的开发面板中执行”Build&Reload”命令。之后,便可在命令行中调用编写好的函数,验证其功能。
Documentation Workflow
- 在.R文件中添加roxygen注释
- Document
- 使用help面板或?命令预览文档
- 重复以上循环
同样地,第二步有三种实现方式:1.devtools::document()
;2.”Ctrl + Shift + D”;3. RStudio开发面板中的”Document”命令。
Test Workflow
测试方面,除了上述Coding Workflow中提到的在命令行中调用函数进行测试之外,还可以利用testthat
包来使测试自动化。
首先要安装testthat
包,再使用devtools::ust_testthat()
命令建立testthat
路径。
下面是自动化测试的工作流:
- 修改代码
- 在
testthat
路径下编写相应的测试语句 - Build&Reload
- Test
- 排除Bug,重复上述过程
以上流程第四步同样有三种实现方式:1.devtools::test()
;2.”Ctrl + Shift + T”;3.RStudio中开发面板的“Test”命令。
Release
按照上述过程开发的R程序包,每一次git push
事实上都是一次发布。使用devtools::install_github("git_repo_goest_here")
命令,可以很方便地安装R程序包。
Next Step
使用devtools
配合RStudio和Git,开发R包的过程已经非常亲民和流水线化。但要开发高质量的R包,需要对R的数据结构和S3等对象系统有更深的理解,而Advanced R则是你通往这一方向的最好伴侣。