如何用devtools快速开发一个R语言包?

在这里插入图片描述

资源在这https://r-pkgs.org/,标记自取。

以下内容中黄色字体是关键流程和注意要点。

1. 准备工作

library(devtools) 可以从任何活动的R会话初始化新包。你不需要担心你是否在一个现有的或新的项目中。

> library(devtools)
载入需要的程辑包:usethis
Warning messages:
1: 程辑包‘devtools’是用R版本4.2.3 来建造的 
2: 程辑包‘usethis’是用R版本4.2.3 来建造的 

为了避免版本不同而导致和本教程有所出入,请检查版本:

> packageVersion("devtools")
[1] ‘2.4.5’

2. 如何完整开发一个R包

为了完成开发包的整个过程,我们将使用devtools中的各种功能从头开始构建一个小的玩具包,其中包含了已发布包中常见的功能:

  • 用于满足特定需求的函数,在本例中是用于处理正则表达式。
  • 版本控制和开放的开发过程。
    • 这在您的工作中是完全可选的,但强烈推荐。您将看到Git和GitHub如何帮助我们公开玩具包的所有中间阶段。
  • 访问已建立的工作流程,以进行安装、获取帮助和检查质量。
    • 单个功能的文档通过roxygen2。
    • 使用testthat进行单元测试。
    • 通过可执行文件README.Rmd获得整个包的文档。
      我们这里创建的包并没有多大用处,只是用来演示使用devtools进行包开发的典型工作流。

3. 初始化新包

调用 create_package() 初始化计算机上目录中的新包。如果该目录还不存在(通常是这种情况),Create_package()将自动创建该目录。

  • 慎重选择在计算机上的什么位置创建这个包。
  • 它应该在您的主目录中,与其他R项目放在一起。
  • 它不应该嵌套在另一个RStudio项目、R包或Git仓库中。
  • 它也不应该在R包库中,其中包含已经构建和安装的包。
  • 将我们在这里创建的源包转换为已安装的包是devtools的一部分。不要试图做devtools的工作!

一旦你选择了在哪里创建这个包,将你选择的路径替换为create_package()调用,如下所示

> create_package("~/regexcite")
✔ Creating 'C:/Users/bailo/regexcite/'
✔ Setting active project to 'C:/Users/bailo/regexcite'
✔ Creating 'R/'
✔ Writing 'DESCRIPTION'
Package: regexcite
Title: What the Package Does (One Line, Title Case)
Version: 0.0.0.9000
Authors@R (parsed):
    * First Last <first.last@example.com> [aut, cre] (YOUR-ORCID-ID)
Description: What the package does (one paragraph).
License: `use_mit_license()`, `use_gpl3_license()` or friends to
    pick a license
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.2.3
✔ Writing 'NAMESPACE'
✔ Writing 'regexcite.Rproj'
✔ Adding '^regexcite\\.Rproj$' to '.Rbuildignore'
✔ Adding '.Rproj.user' to '.gitignore'
✔ Adding '^\\.Rproj\\.user$' to '.Rbuildignore'
✔ Opening 'C:/Users/bailo/regexcite/' in new RStudio session
✔ Setting active project to '<no active project>'

如果你在RStudio中工作,你会发现自己在一个新的RStudio实例中,打开你的新regexcite包(和Project)。如果您需要手动执行此操作,请导航到该目录并双击regexcite.Rproj。

您可能需要再次调用库(devtools),因为create_package()可能已经将您放入新包中的新R会话中。

比如,运行create_package(“~/regexcite”)的RStudio中:
在这里插入图片描述
运行接受,除了在控制台显示结果外,还自动打开了新包的RStudio窗口:
在这里插入图片描述
故此,在新包的RStudio窗口中,需要重新调用库(devtools)。

> library(devtools)
载入需要的程辑包:usethis
Warning messages:
1: 程辑包‘devtools’是用R版本4.2.3 来建造的 
2: 程辑包‘usethis’是用R版本4.2.3 来建造的

新包目录里的内容如下:
在这里插入图片描述

  • .Rbuildignore列出了我们需要但在从源代码构建R包时不应该包含的文件。如果你没有使用RStudio, create_package()一开始可能不会创建这个文件(也不会创建.gitignore),因为没有RStudio相关的机制需要被忽略。然而,无论您使用的是什么编辑器,您都可能在某些时候开发出对. rbuildignore的需求。
  • .Rproj.user(如果有的话)是RStudio内部使用的目录(我这里就没有)。
  • .gitignore预测了Git的使用,并告诉Git忽略一些由R和RStudio创建的标准的幕后文件。即使您不打算使用Git,这也是无害的。
  • DESCRIPTION提供有关包的元数据。
  • NAMESPACE声明包导出供外部使用的函数,以及包从其他包导入的外部函数。在这一点上,它是空的,除了一个注释声明这是一个您不应该手工编辑的文件。
  • R/目录是包的“业务端”。它将很快包含带有函数定义的. r文件。
  • regexcite.Rproj是使该目录成为RStudio项目的文件。即使你不使用RStudio,这个文件也是无害的。或者你可以用create_package(…), rstudio = FALSE)。

4. 启用Git仓库

regexcite目录是一个R源码包和一个RStudio项目。现在我们使用 use_git() 将它变成一个Git存储库。

在交互式会话中,系统将询问您是否要在这里提交一些文件,以及您是否应该接受该提议。
在这里插入图片描述
再次接受立即重启RStudio。

那么一步对包有什么变化呢?只需要创建一个git目录,它在大多数上下文中是隐藏的,包括RStudio文件浏览器。它的存在证明我们确实在这里初始化了一个Git仓库。

上面可以看到RStudio里是看不到git目录的,而在电脑的文件浏览器中可以看到。
在这里插入图片描述

5. 按照目标实现一个函数

这里是开发R包的核心,但不管多复杂也只是开发流程的一步。这里用简单的一个函数示例。

strsplit1 <- function(x, split) {
   
   
  strsplit(x, split = split)[[1]]
}

6. 在.R文件夹下创建文件并保存代码

应该把strsplit1()的定义放在哪里?将它保存在包的R/子目录下的.R文件中。合理的起始位置是为包中每个面向用户的函数创建一个新的. r文件,并以该函数命名该文件。当您添加更多函数时,您将希望放松这一点,并开始将相关函数分组在一起。我们将strsplit1()的定义保存在文件R/strsplit1.R中。

帮助器 use_r() 在R/下创建和/或打开一个脚本。

在这里插入图片描述
将上面的strsplit1()函数写入strsplit1文件中并保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALittleHigh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值