一、准备工作

  • 安装开发所需的R包:devtools
install.packages("devtools")
library(devtools)install.packages("roxygen2")
library(roxygen2)

二、创建R包

2.1 初始化R包

  • 基于create_package()函数初始化一个名为plotAUC的R包;基于roxygenize()函数生成帮助文档(一般产生一个空的man目录)。
  • 执行完成后,将在当前目录下创建plotAUC文件夹,并在新生成的文件中,自动创建多个必须的文件和R目录(文件夹),如DESCRIPTIONNAMESPACE… 及 项目工程文件plotAUC.Rproj等各种文件(可以自行查看)
  • 执行结束后,会自动开启一个新的IDE窗口。
  • 目录结构如下:
> usethis::create_package("./plotAUC")
√ Creating './plotAUC/'
√ Setting active project to 'D:/worktask/RandomForest/plotAUC'
√ Creating 'R/'
√ Writing 'DESCRIPTION'
Package: plotAUC
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 topick a license
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.1.2
√ Writing 'NAMESPACE'
√ Writing 'plotAUC.Rproj'
√ Adding '^plotAUC\\.Rproj$' to '.Rbuildignore'
√ Adding '.Rproj.user' to '.gitignore'
√ Adding '^\\.Rproj\\.user$' to '.Rbuildignore'
√ Opening 'D:/worktask/RandomForest/plotAUC/' in new RStudio session
√ Setting active project to '<no active project>'> roxygenize("D:/worktask/RandomForest/plotAUC")

2.2 修改 DESCRIPTION 文件

Package: plotAUC
Title: What the Package Does (One Line, Title Case)
Version: 0.0.0.9000
Authors@R: person(given="First", family="Last",email="first.last@example.com", role=c("aut", "cre"),comment=c(ORCID = "YOUR-ORCID-ID"))
Description: What the package does (one paragraph).
License: `use_mit_license()`, `use_gpl3_license()` or friends to pick alicense
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.1.2

2.3 创建第一个函数

在新开启的IDE窗口中,

  • 执行usethis::use_r()函数,创建R函数;
  • 或者,将已经完成的R文件(如test.R)直接放到R目录下
> usethis::use_r("plotAUC")
√ Setting active project to 'D:/worktask/RandomForest/plotAUC'
* Modify 'R/plotAUC.R'
* Call `use_test()` to create a matching test file
  • 执行usethis::use_r()函数之后,在R目录下自动创建一个R函数,并在R窗口中打开
  • 接下来,为这个函数添加程序。

在编写程序过程中,如果依赖其他的R-packages,可以使用use_package("Package-names")函数,将相应的包加载到当前包环境中。
此时,也会在元数据文件中增加一个条目:Imports: ggplot2, ggprism

> use_package("ggplot2")
√ Adding 'ggplot2' to Imports field in DESCRIPTION
* Refer to functions with `ggplot2::fun()`
> use_package("ggprism")
√ Adding 'ggprism' to Imports field in DESCRIPTION
* Refer to functions with `ggprism::fun()`

2.4 测试函数

使用devtools::load_all()函数加载创建的函数(执行了building-installing-attaching

> devtools::load_all()
i Loading plotAUC
> plot_cum_auc(imp, auc, rawdata)

2.5 包检查

  • 主要是核验包的其他文件或附件是否合法
> devtools::load_all()
> usethis::use_mit_license()
> devtools::check() # 不需要任何参数
i Updating plotAUC documentation
i Loading plotAUC
-- Building ------------------------------------------------------------------------------ plotAUC --
Setting env vars:
* CFLAGS    : -Wall -pedantic
* CXXFLAGS  : -Wall -pedantic
* CXX11FLAGS: -Wall -pedantic
* CXX14FLAGS: -Wall -pedantic
* CXX17FLAGS: -Wall -pedantic
* CXX20FLAGS: -Wall -pedantic
----------------------------------------------------------------------------------------
........0 errors √ | 1 warning x | 2 notes x
  • 备注:只要没有error,基本不影响整个包的创建;自己可以基于自己的实际情况自行查找修改warning和notes

2.6 为函数添加说明/帮助文档

我们可以为函数加上一些帮助文档,文档放在man文件夹里面;帮助文档的后缀是.Rd,一种Rmarkdown文件。

有两种方法可以添加帮助文档:

  • 直接在每一个函数上方以标准格式形式写注释
  • 打开code文件(如plotAUC.R),点击Code>Insert roxygen skeleton(注意,这个时候光标要在函数内部)。随后,自动在函数上面插入模板,可在此基础上进行修改。
#' Title
#'
#' @param imp
#' @param auc
#' @param rawdata
#' @param sec_axis_percent
#'
#' @return
#' @export
#'
#' @examples

最后,使用roxygen2::roxygenize()devtools::document()生成.Rd帮助文档(存在于man目录下

> roxygenize("D:/worktask/RandomForest/plotAUC")
i Loading plotAUC
> devtools::document()
i Updating plotAUC documentation
i Loading plotAUC
Writing NAMESPACE
Writing plot_cum_auc.Rd
> ?plot_cum_auc
i Rendering development documentation for "plot_cum_auc"

2.7 添加内置数据集

2.7.1. 手动添加内置数据

  • 在包目录下,添加data文件夹
  • *.RData文件迁移至data文件夹下

2.7.2. 自动添加内置数据

  • 先将数据读入包环境中,然后执行devtools::use_data(dat1, dat2, dat3,...)
  • 自动在包目录中添加data目录,并保存数据为*.rda文件(RData数据类型)
> usethis::use_data(imp, auc, rawdata, group, dat1)
√ Adding 'R' to Depends field in DESCRIPTION
√ Creating 'data/'
√ Setting LazyData to 'true' in 'DESCRIPTION'
√ Saving 'imp', 'auc', 'rawdata', 'group', 'dat1' to 'data/imp.rda', 'data/auc.rda', 'data/rawdata.rda', 'data/group.rda', 'data/dat1.rda'
* Document your data (see 'https://r-pkgs.org/data.html')

备注:一般在加载R包后,使用data("auc")加载数据文件。

2.7.3. 内置数据集注释

  • 撰写data.R
    对这些数据进行docment的时候,是对这些数据的名称进行说明,并存放到R/目录下。比如,在ggplot2包中对diamonds数据的说明存放在R/data.R中:
#' @docType data
#' @name auc
#'
#' @title Test data
#' @description  A dataset containing the prices and other attributes of almost 54,000
#' diamonds.
#' @details Success!!
#'
#' @format A data frame with 53940 rows and 10 variables:
#' \describe{#'   \item{AUCs}{The cumulative AUC value }
#'   \item{Lable}{Is it selected?}
#'   \item{NumberOfFeatures}{The rank of features}
#'   ...
#' }
#' @source \url{NULL}
NULL

备注:\describe{...}中可以仅填写...省略号,一匹配所有的信息;@name必须与数据文件同名

  • 创建document文档
> document()
i Updating plotAUC documentation
i Loading plotAUC
Writing NAMESPACE
Writing NAMESPACE
Writing auc.Rd
Writing imp.Rd
Writing group.Rd
Writing dat1.Rd
Writing rawdata.Rd

2.8 包检查和创建readme文件

最后,我们可以use_readme_rmd()build_readme()生成readme文件,对R包进行说明,包括packages的描述;安装;示例。

> devtools::check()
> use_readme_rmd()
√ Writing 'README.Rmd'
√ Adding '^README\\.Rmd$' to '.Rbuildignore'
* Modify 'README.Rmd'
* Update 'README.Rmd' to include installation instructions.
> build_readme()
i Installing plotAUC in temporary library
i Building D:/worktask/RandomForest/plotAUC/README.Rmd> build() # 创建R包:*.tar.gz# 需要重新启动R编辑器
> devtools::install() # 安装R包

3. 总结

基本的流程是:

create_package 创建一个R包
use_r()写函数,插入roxygen注释和tag,使用document()生成文档
# usr_data() 添加内置数据
load_all()载入包
use_***_license 添加license
# install安装包
# use_testthat() 和use_test()生成测试文件;test()进行测试
check对整个包进行检查
use_readme_rmd()和build_readme()生成readme文件
build() 创建R包

手把手教你制作R包(一)相关推荐

  1. 怎么把视频转成gif格式?手把手教你制作表情包

    怎么把视频转成gif格式?GIF格式大家都不陌生,它与视频相比起来,具有体积小.易发送传输等优点,我们平时也经常能看到一些精彩视频片段制作而成的gif表情包,其实把视频转gif并不难,下面就来给大家分 ...

  2. Android反编译:手把手教你制作高德地图车机共存版

    Android反编译:手把手教你制作高德地图车机共存版 前言 前期准备 反编译流程 反编译获取有效信息 修改关键信息 修改包名 修改其它配置 生成APK 重新打包成apk 重新签名 绕过校验机制 定位 ...

  3. 手把手教你捕获数据包

    原文链接:http://blog.csdn.net/piggyxp/article/details/24444 前   言 经常看到论坛有人问起关于数据包的截获.分析等问题,幸好本人也对此略有所知,也 ...

  4. 手把手教你制作AppPreview视频并上传到appStore进行审核

    手把手教你制作AppPreview视频并上传到appStore进行审核 注意,你需要使用iMovie才能够制作AppPreview视频文件,用QuickTime录制的无效! 最终效果 1. 新建一个事 ...

  5. 最新免费自建APP平台哪个好?手把手教你制作APP

    大型二手交易网站咸鱼近日发布<90后分享经济消费报告>,报告显示:16-27岁的年轻人用户占比已达55%,90后已成为分享经济的绝对主力:基于地理位置或兴趣同好形成的社区"鱼塘& ...

  6. 手把手教你制作手机底部导航栏,领导看完都说好

    手把手教你制作手机底部导航栏,领导看完都说好

  7. 天线巴伦制作和原理_【火腿DIY】巴伦知识图集|手把手教您制作1:1短波巴伦

    洛阳市无线电运动协会 CQ<现代通讯>杂志官网 黑暗森林的博客 什么是巴伦?短波用巴伦的作用是什么? 巴伦(英文:Balun)是平衡Balanced和不平衡Unbalanced转换器的英文 ...

  8. PWA入门:手把手教你制作一个PWA应用

    摘要: PWA图文教程 原文:PWA入门:手把手教你制作一个PWA应用 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. 简介 Web前端的同学是否想过学习app开发,以弥补自 ...

  9. 怎么将自己的头像p到特定的背景图_【后期修图】photoshop手把手教你制作属于自己的酷炫的微信头像...

    原标题:[后期修图]photoshop手把手教你制作属于自己的酷炫的微信头像 效果图先放上 1.新建一个白色的背景,这里是1080*720的.然后在图层面板下面单击创建新的调整图层/渐变,设 置 好渐 ...

  10. 手把手教你制作微信十周年专属勋章头像

    本文图文手把手教你制作微信十周年专属勋章头像. 首先扫码打开"微信十年 时空隧道"小程序,微信浏览的长按可识别小程序码. 打开小程序后先不用操作,也不用担心以为中毒了乱刷屏

最新文章

  1. 基于vue和elementUI封装框选表格组件
  2. U-net进行图像分割
  3. ASP.NET分页存储过程自定义用户控件
  4. Core Data系列二——基础概念
  5. 四针角oled屏连接arduino_使用Arduino开发板连接OLED显示屏制作一款智能手表
  6. 用offset调用文章
  7. python自动关闭弹窗_python – 每隔x分钟创建一个tkinter窗口,然后在y秒后自动关闭它...
  8. 解决:'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  9. 剖析SQL Server2005 SQLCLR代码安全性
  10. 通信(1)----Http协议的方法讲解
  11. 汇编学习--7.13--标志寄存器
  12. 【转】nodejs 爬取前端面经并生成词云
  13. java控制结构_Java 控制结构与方法
  14. shiro设置session超时时间
  15. 分析137份大数据简历-统计技术名词词频
  16. 微信公众号服务号怎么添加模板消息给所有粉丝群发
  17. 小技巧|Cadence安装之后,原理图DSN文件的默认图标不对如何进行修改
  18. pandas 行列转换
  19. PHP + QQ邮箱发送邮箱验证码
  20. VMware下载安装、虚拟机创建、CentOS8镜像下载配置的具体步骤

热门文章

  1. CNDS的发布文章方法
  2. 计算机网络之网络安全基础
  3. EDA技术实用教程VHDL篇--Quartus II 13.1实用教程--工程建立
  4. linux 生成excel格式的文件怎么打开乱码,导出的文件乱码怎么办(各位,汉字在excel表格中显示乱码,怎么办)...
  5. excel打开csv乱码解决------------为什么pycharm里面csv不乱码,excel里面却乱码了
  6. WAP中推送技术的分析与设计
  7. 数据库入门基本知识点
  8. cnode系列之登陆注册功能
  9. hosts 下载 android
  10. 零跑科技实现“领跑”背后:频现“质量门”,噱头大于实际?