跳转至

转载自参考 https://mp.weixin.qq.com/s/Q_chMLju5YEIFncWJ2GFlw

准备:

R,Rstudio,github桌面版,github账户

基本要求

会使用上面的软件,理解本地版github同步到远端的过程

开始写包

  1. 包的基本结构

  2. 编写函数

  3. 生成文档骨架

  4. 用 {renv} 进行依赖(加载包)的版本控制

install.packages("renv")
初始化环境

renv::init() 自动打包项目中的依赖包的信息,包括名称和版本信息 renv::update() 对依赖包进行更新(更新依赖包的版本)

更新到当前所用的包环境(每次编写新的函数或脚本后,如果有依赖新的包,则需要运行这条命令,更新自己的依赖环境信息)

renv::snapshot() (更新的是自己编写的包里对依赖包的依赖信息)

如果换了电脑开发,renv::restore() 恢复到开发时用的包环境

包为必需的时候用imports; 非必须的时候用Suggests

usethis::use_package(package = "ggplot2", type = "imports") usethis::use_package(package = "renv", type = "Suggests")

  1. 编写READEME 会自动生成一个readme.Rmd文件,
# 引入必备包 {rmarkdown}
install.packages("rmarkdown")

# 虽然也可以使用 usethis::use_readme_md()
usethis::use_readme_rmd()

然后使用knit转换为github的md文件即可或者 运行命令也可 rmarkdown::render('README.Rmd',"github_document")

  1. 代码格式优化 使用{styler} 来美化代码
# 安装 {styler}
install.packages("styler")

# 对整个包进行代码美化
styler::style_pkg()
  1. 用 {lintr} 来规范代码
# 安装 {lintr}
install.packages("lintr")

# 对整个包进行不符合规范的代码查询(当然,都没有写多少代码,当然不会出现什么错误结果)
lintr::lint_package()

# 比如我们在 add 函数中增加一个超过80字符的注释
add <- function(a, b) {
  # aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  a + b
}

# 再次执行
lintr::lint_package()
  1. 用 {testthat} 来测试代码 在编写一个具有可靠性的包的时候,特别是当函数变得复杂的时候,测试是必不可少的。 我们可以用 {usethis} 来快速设定编写测试所需要的 {testthat} 的环境。
# 设定环境
usethis::use_testthat()

安装 {testthat}

install.packages("testthat")

快速创建测试文件

usethis::use_test() 10. 编写包的说明 在别的教程中,一般都会把包的说明放到前面,说明这也是很重要的一步。 在这里,为了把说明部分都汇总到一起,就将其放到了偏后的部分。

打开根目录下的 DESCRIPTION 文件,对包说明进行一些修改,主要是 Title、Authors 和 Description 部分,别的都可以原封不动:

Package: rPackageTutorial
Title: Create R Package In A Professional Way Tutorial
Version: 0.0.0.9000
Authors@R: 
    person(given = "Wei",
           family = "Su",
           role = c("aut", "cre"),
           email = "swsoyee@gmail.com")
Description: Show an example of how to create a r package in a professional way.
License: `use_mit_license()`, `use_gpl3_license()` or friends to
    pick a license
Encoding: UTF-8
LazyData: true
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.1.1
Suggests: 
    testthat (>= 3.0.0)
Config/testthat/edition: 3

如果没有依赖到别的具有不同版权的第三方包的话,一般选择最为广泛使用的 MIT 即可

usethis::use_mit_license()

升级版本号

usethis::use_version()

轻量版检查

devtools::check() 11. 用 Github Action 自动检查

如无特殊需求,或者新手入门下述命令直接无脑设置即可

usethis::use_tidy_github_actions()

devtools::build_rmd()

  1. 增加 NEWS 页面,用于记录每一次升级所做出的变更 usethis::use_news_md()

to be continued

回到页面顶部