准备工作
-
安装必要工具
sudo apt-get install r-base-dev build-essential pandoc # Debian/Ubuntu sudo yum install R-devel texlive # CentOS/RHEL
- 确保安装最新版R(≥4.0.0)及开发工具。
- 推荐安装
devtools
包(R内执行):install.packages("devtools")
-
创建包目录结构
使用R快速生成标准框架:devtools::create("myRPackage") # 创建名为myRPackage的包目录
生成结构:
myRPackage/ ├── DESCRIPTION # 元数据文件 ├── NAMESPACE # 命名空间控制 ├── R/ # R脚本存放目录 └── man/ # 帮助文档目录
配置核心文件
-
编辑DESCRIPTION文件
示例(必填字段):Package: myRPackage 我的R包功能描述 Version: 0.1.0 Author: 你的名字 Maintainer: 你的名字 <you@example.com> Description: 详细说明包的功能。 License: GPL-3 Imports: dplyr (≥1.0.0), ggplot2
-
编写R函数与文档
- 在
R/
目录下创建脚本(如calculate.R
):#' 计算平方值 #' @param x 数值向量 #' @return 平方后的向量 #' @export square <- function(x) { return(x^2) }
- 自动生成文档(R内执行):
devtools::document() # 生成man/square.Rd帮助文件
- 在
构建与检查包
-
本地构建包
终端进入包目录执行:R CMD build myRPackage # 生成myRPackage_0.1.0.tar.gz源码包
-
严格检查合规性
R CMD check myRPackage_0.1.0.tar.gz
- 通过检查需满足:
- 无
ERROR
/WARNING
。 - 通过所有测试(若有
tests/
目录)。 - 文档完整(缺失文档会导致CRAN拒绝)。
- 无
- 通过检查需满足:
安装与分发
-
本地安装
R CMD INSTALL myRPackage_0.1.0.tar.gz
R内验证:
library(myRPackage) square(5) # 输出25
-
分发选项
- CRAN(官方仓库)
需通过CRAN政策,使用devtools::release()
提交。 - GitHub
用户通过以下命令安装:devtools::install_github("yourusername/myRPackage")
- 私有源
将.tar.gz
文件托管至服务器,通过install.packages("http://path/to/package.tar.gz", repos=NULL)
安装。
- CRAN(官方仓库)
高级场景处理
-
包含C/C++代码
- 在
src/
目录存放源码。 - 配置
Makevars
文件(编译选项)。 - 使用
Rcpp
时添加:LinkingTo: Rcpp Imports: Rcpp
- 在
-
添加数据集
- 数据存于
data/
目录。 - 用
R/sysdata.rda
存储内部数据。
- 数据存于
-
单元测试
使用testthat
包:usethis::use_testthat() # 创建tests/testthat目录 # 在tests/testthat/test_calculation.R中编写测试
常见问题解决
- 错误:非ASCII字符
在DESCRIPTION
中声明编码:Encoding: UTF-8
- 依赖项缺失
确保Imports
字段完整,用户安装时自动解决依赖。 - 文档警告
使用devtools::check_man()
验证man/
文件完整性。
规范打包R程序能提升代码复用性和研究可重现性,定期使用devtools::check()
确保质量,参考《R Packages》权威指南优化流程,复杂项目建议结合roxygen2
自动化文档,用testthat
强化测试覆盖。
引用说明
- R Core Team. Writing R Extensions. CRAN, 2025.
- Wickham H, Bryan J. R Packages. O’Reilly, 2025.
- CRAN Submission Policy: https://cran.r-project.org/web/packages/policies.html 基于R官方文档及行业最佳实践,适用于主流Linux发行版(Ubuntu/CentOS等)。*
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/8592.html