R包开发
创建R包基本流程:
开发工具:devtools
运行调试 usethis
创建修改
基本流程:
create_package
创建一个R包use_r()
写函数,插入roxygen注释和tag,使用document()
生成文档load_all()
载入包use_***_license
添加licenseinstall
安装包use_testthat()
和use_test()
生成测试文件;test()
进行测试check
对整个包进行检查use_readme_rmd()
和build_readme()
生成readme
文件
开发工具:
代码语言:txt复制install.packages("devtools")
library(devtools)
library(usethis)
初始化package项目: create_package()
usethis::create_package("~/toypackages")
创建函数:usethis::use_r()
-> R/*.R
-> 添加R函数脚本(合并因子)
usethis::use_r("fbind")
代码语言:txt复制fbind <- function(a, b) {
factor(c(as.character(a), as.character(b)))
}
交互载入验证:devtools::load_all()
快捷键:Ctrl Shift L -> man
devtools::load_all()
a <- factor(c("character", "hits", "your", "eyeballs"))
b <- factor(c("but", "integer", "where it", "counts"))
fbind(a,b)
自动检查包:devtools::check()
快捷键:Ctrl Shift E
devtools::check()
添加license: 修改DESCRIPTION
文件 -> metadata (作者/包名称 /简介等)
`use_mit_license()` -> `MIT` license
代码语言:txt复制usethis::use_mit_license("xiongfeng chen")
添加函数帮助文档:
man/*.Rd
<- roxygen2
包生成
fbind.R
-> Code>Insert roxygen skeleton
#' @examples
#' fbind(iris$Species[c(1, 51, 101)], PlantGrowth$group[c(1, 11, 21)])
fbind <- function(a, b) {
factor(c(as.character(a), as.character(b)))
}
生成man/fbind.Rd
文件:document()
快捷键:Ctrl Shift D
document()
代码语言:txt复制?fbind
生成包:install()
-> toypackages_0.0.0.9000.tar.gz
install()
测试包:
代码语言:txt复制library(toypackage)
a <- factor(c("character", "hits", "your", "eyeballs"))
b <- factor(c("but", "integer", "where it", "counts"))
fbind(a, b)
规范测试:
use_testthat()
-> DESCRIPTION
文件加入suggests:testthat
:
-> 创建tests/testthat`文件夹,并生成`testthat.R`文件
代码语言:txt复制library(devtools)
use_testthat()
创建测试文件:use_test()
-> 生成tests/testthat/test-fbind.R
文件
use_test("fbind")
修改测试内容: expect_*fun()
test_that("fbind() binds factor (or character)", {
x <- c("a", "b")
x_fact <- factor(x)
y <- c("c", "d")
z <- factor(c("a", "b", "c", "d"))
expect_identical(fbind(x, y), z)
expect_identical(fbind(x_fact, y), z)
})
进行测试:test()
快捷键:Ctrl Shift T
test()
调用其他包函数: use_package()
-> `DESCRIPTION`文件添加 `Imports::forcats`
代码语言:txt复制use_package("forcats")
R包readme
说明文件:use_readme_rmd()
build_readme()
创建数据:usthis::use_data()
- > 'data/x.rda' / 'data/mtcars.rda'
x <- sample(1000)
usethis::use_data(x, mtcars,`internal = TRUE`)
保留原始数据:usethis::use_data_raw()
-> data-raw
和DATASET.R
usethis::use_data_raw()
数据文档说明:R/data.R
代码语言:txt复制#' Prices of 50,000 round cut diamonds.
#'
#' A dataset containing the prices and other attributes of almost 54,000
#' diamonds.
#'
#' @format A data frame with 53940 rows and 10 variables:
#' describe{
#' item{price}{price, in US dollars}
#' item{carat}{weight of the diamond, in carats}
#' ...
#' }
#' @source url{http://www.diamondse.info/}
"diamonds"
包文档说明: <-package?dplyr
调出
创建包:usethis::create_package(path)
工作路径最好是源码包的top-level
参考:
R packages 2nd edition
cheatsheet