参见:https://blog.csdn.net/qazplm12_3/article/details/109349262
很多函数都是在usethis 包中的。
好用的代码
- use_r
> use_r("peng")
√ Setting active project to 'D:/01-dir_for_work/02-new-without-packrat'
√ Creating 'R/'
* Modify 'R/peng.R'
* Call `use_test()` to create a matching test file
会自动在R 目录下创建peng.R 文件。
并且会启动编辑器打开这个文件。
- use_mit_license
use_mit_license("aa bb")
为作者aa bb 添加mit license 。
- document
和roxygenize 很相似,也是通过头部注释自动生成R 函数的man 帮助文件的。
单元测试
use_testthat
该函数会在DESCRIPTION 文件中添加Suggests: testthat:
Package: pengToolkit
Title: Some useful functions developed by that man.
Version: 0.0.2
Authors@R: "Mug Peng <mugpeng@foxmail.com> [aut, cre]"
Description: Some useful functions developed by that man.
Depends: R (>= 3.1.1)
License: GPL-2
Encoding: UTF-8
LazyData: false
Date: 2021-05-19
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.1.1
NeedsCompilation: no
Packaged: 2021-05-19 14:54:21 UTC; lenovo
Author: "Mug Peng" [aut, cre]
Maintainer: "Mug Peng" <mugpeng@foxmail.com>
Suggests:
testthat (>= 3.0.0)
Config/testthat/edition: 3
并且创建了tests/testthat
文件夹:
接下来我们继续用use_test
来创建测试文件,这里选择代码相对简单的set_mirror 函数(其实都很简单啊55~,三个函数加上注释代码一共才107 行):
use_test("set_mirror")
相比起先前的手动定义的test 文件,该函数帮我们新建了一个模板:
test_that("multiplication works", {
expect_equal(2 * 2, 4)
})
修改测试代码,希望修改后对应cran 镜像源为清华,expect_identical 检测左右两边值是否相等:
test_that("set_mirror change the mirror", {
r <- NULL
r[ "CRAN" ] <- "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"
set_mirror()
expect_identical(getOption( "repos" ), r)
})
直接测试即可:
> test()
i<U+00A0>Loading pengToolkit
i<U+00A0>Testing pengToolkit
√ | OK F W S | Context
/ | 0 | set_mirror [1] "Now you successfully take a ladder, go ahead without restriction!"
√ | 1 | set_mirror
== Results =======================================================
[ FAIL 0 | WARN 0 | SKIP 0 | PASS 1 ]
设置依赖包
有些时候我们想要在自己的包中调用其他包的函数,可以使用use_package()函数。
比如我的函数boost_install_packages 就依赖了BiocManager 包:
use_package("BiocManager")
> use_package("BiocManager")
√ Adding 'BiocManager' to Imports field in DESCRIPTION
* Refer to functions with `BiocManager::fun()`
这时候如果再打开DESCRIPTION 文件,就添加了import 信息了: