热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

手把手教你制作R包(二)

在前一章节,我们纤细的介绍了如何进行R包的制作(手把手教你制作R包(一))。接下来,我们详细来介

在前一章节,我们纤细的介绍了如何进行R包的制作(手把手教你制作R包(一))。接下来,我们详细来介绍每一部分。


1、创建包


  • 包的名称只能包含字母数字和点号(不建议使用点号,可能会和文件拓展名或者S3方法混淆);
  • 包的名称必须以字母开头并且不能以点号结尾
  • 创建包使用usethis::create_package(path)函数

如何将之前已经存在的源码包文件夹转化成一个Rstudio项目:


  • File > New Project > Existing Directory
  • 使用create_package()参数是已经存在的目录
  • 使用usethis::use_rstudio() 在已经存在的源码包目录内部使用

注意:在开发的时候,工作路径最好是源码包的top-level


2、元数据

元数据一般保存在DESCRIPTION文件中。其中,Rstudio和devtools将含有该文件的目录就认为是包目录。
DESCRIPTION的初始化内容为:

Package: toypackages
Title: What the Package Does (One Line, Title Case)
Version: 0.0.0.9000
Authors@R: person(given = "First",family = "Last",role = c("aut", "cre"),email = "first.last@example.com",comment = c(ORCID = "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
LazyData: true
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.1.1

详细内容如下


  • DESCRIPTION文件的格式为DCF (Debian contral format);每一行都有一个filed名称和值,两者用冒号分开;当值有多行的时候需要缩进
  • Title字段一般比较短,只显示65个字符
  • Version表示版本号,版本号最少要有2个整数中间用点号或者横线隔开

版本推荐的格式:

  • released 版本由3个数字构成:\.\.\
  • In-development 版本由4个数字构成,第四个是开发版本,从9000开始,所以包的第一个版本是0.0.0.9000


  • Auther@R字段是作者的信息,是R代码:

Authors@R: person(given = "First",family = "Last",role = c("aut", "cre"),email = "first.last@example.com",comment = c(ORCID = "YOUR-ORCID-ID"))

person函数有4个主要的参数:

  • 作者名:given在前(名),family在后(姓)
  • email地址
  • role有四个:
    1. cre creator or maintainer 有问题时应该联系的维护者
    2. aut 对包贡献最大的人
    3. ctb 贡献者
    4. cph:copyright holder 如果版权是作者以外的人或机构,要注明


  • Description:是对包的描述,每行不超过80个字符,第二行使用4个空格分开
  • license :可以是开源许可:MIT、GPL-2/GPL-3、CC0
  • 添加依赖依赖包:描述依赖用的是Imports和Suggests

Imports:pkgname
Suggests:pkgname

两者的区别:

  • Imports描述的是包工作所必需的包,在我们的包被安装的时候,如果这些包之前没有被安装,这个时候会被安装
  • Suggests不是必需安装的,可能在示例数据,运行测试,创建vignettes或者包里面只有少量函数使用这些包,所以我们要在需要这些包的函数里面检查这些包是否安装
  • use_package(package, type = "Imports", min_version = NULL):type参数指定是Imports还是Suggests,min_version参数指定包的最低版本


3、函数文档化:man目录

标准方法是在man/文件夹下写.Rd文件,再渲染成``HTML和PDF;但是可以使用roxygen2将R-code中特定格式的注释转化成.Rd文件,roxygen2除了生成.Rd文件外还可以更改NAMESPACEDESVRIPTION中的Collate字段。

基本的流程有4步:


  • 将roxygen格式的注释添加到.R文件中
  • 使用devtools::document()(或者使用快捷键:Ctrl/Cmd + Shift + D)将注释转化成.Rd文件
  • 使用?预览文档
  • 修改,直到满意

# 创建add函数
use_r("add") # 添加roxygen2格式的注释
#' Add together two numbers
#'
#' @param x A number.
#' @param y A number.
#' @return The sum of \code{x} and \code{y}.
#' @examples
#' add(1, 1)
#' add(10, 1)
add <- function(x, y) {x &#43; y
}# 创建 .Rd 文件&#xff1a;该文件自动在man目录下添加
devtools::document()

roxygen2格式的注释


  • Roxygen注释以#&#39;开头&#xff0c;并且在函数的前面&#xff1b;每一行不超过80个字符
  • 一般采用三段式&#xff1a;该部分会被特殊解释&#xff08;只需要保持三段式即可&#xff09;
    1. 标题&#xff08;&#64;title&#xff09;&#xff0c;在注释中属于第一段&#xff08;或者第一句&#xff09;
    2. 描述&#xff08;&#64;description&#xff09;&#xff0c;在注释中属于第二段
    3. 详细信息&#xff08;&#64;detail&#xff09;&#xff0c;在注释中属于第三段
  • 可插入其他内容&#xff1a;
    1. web资源&#xff1a;\url{https://www.r-project.org}
    2. 包中的内容&#xff1a;\code{\link{functioname}}
    3. 其他包中的内容&#xff1a;\code{\link[packagename]{functioname}}

文档化函数&#xff1a;添加参数注释
大部分函数有3个tag&#xff1a;&#64;param, &#64;examples, &#64;return


  • &#64;param name description
    1. &#64;param参数后面接参数的名称和描述&#xff1b;
    2. 描述必须以大写字母开头&#xff0c;点号结尾&#xff0c;可以是多行甚至多段&#xff1b;
    3. 可以同时对多个参数进行说明&#xff0c;用逗号隔开如:&#64;param x,y Numeric vectors.
  • &#64;examples 提供如何使用这个函数的R代码
    1. 可以使用\dontrun{}来包含会报错的代码&#xff1b;
    2. 可以将示例放到另外的文件夹中&#xff0c;并使用&#64;example path/relative/to/package/root来插入&#xff0c;注意这种用法是&#64;example没有s
  • &#64;return description 对输出的描述
    示例

#&#39; Sum of vector elements
#&#39;
#&#39; \code{sum} returns the sum of all the values present in its arguments.
#&#39;
#&#39; This is a generic function: methods can be defined for it directly
#&#39; or via the \code{\link{Summary}} group generic. For this to work properly,
#&#39; the arguments \code{...} should be unnamed, and dispatch is on the
#&#39; first argument.
#&#39;
#&#39; &#64;param ... Numeric, complex, or logical vectors.
#&#39; &#64;param na.rm A logical scalar. Should missing values (including NaN)
#&#39; be removed?
#&#39; &#64;return If all inputs are integer and logical, then the output
#&#39; will be an integer. If integer overflow
#&#39; \url{https://en.wikipedia.org/wiki/Integer_overflow} occurs, the output
#&#39; will be NA with a warning. Otherwise it will be a length-one numeric or
#&#39; complex vector.
#&#39;
#&#39; Zero-length vectors have sum 0 by definition. See
#&#39; \url{https://en.wikipedia.org/wiki/Empty_sum} for more details.
#&#39; &#64;examples
#&#39; sum(1:10)
#&#39; sum(1:5, 6:10)
#&#39; sum(F, F, F, T, T)
#&#39;
#&#39; sum(.Machine$integer.max, 1L)
#&#39; sum(.Machine$integer.max, 1)
#&#39;
#&#39; \dontrun{
#&#39; sum("a")
#&#39; }
sum <- function(..., na.rm &#61; TRUE) {}

4、数据文档化

有3个主要的方法可以在包中包含数据&#xff1a;


  • 如果想要在包中包含二进制数据&#xff0c;并且可以被用户使用&#xff0c;将这些数据放在data/文件夹中&#xff0c;这是放示例数据的最好的地方
  • 如果想要包含解析后的数据&#xff0c;并且用户不可以使用&#xff0c;将这些数据放到R/sysdata.rda&#xff0c;这些数据可以是函数运行所需要的
  • 如果想要存储原始数据&#xff0c;可以放到inst/extdata里面

创建数据
data/文件夹中应该是.Rdata格式&#xff0c;含有单个对象&#xff0c;并且名字和文件名是一样的&#xff0c;可以使用usthis::use_data()来创建

> x <- sample(1000)
> usethis::use_data(x, mtcars)
✓ Adding &#39;R&#39; to Depends field in DESCRIPTION
✓ Creating &#39;data/&#39;
✓ Saving &#39;x&#39;, &#39;mtcars&#39; to &#39;data/x.rda&#39;, &#39;data/mtcars.rda&#39;
● Document your data (see &#39;https://r-pkgs.org/data.html&#39;)

数据文档化
对这些数据进行docment的时候&#xff0c;是对这些数据的名称进行说明&#xff0c;并存放到R/目录下的data.R文件中&#xff0c;比如在ggplot2包中对diamonds数据的说明存放在R/data.R中&#xff1a;
对数据进行document有额外的两个tag:


  1. &#64;format 是对数据的overview&#xff0c;包含对每个变量的说明
  2. &#64;source 是对数据来源的说明&#xff0c;通常是网址\url{}

#&#39; Prices of 50,000 round cut diamonds.
#&#39;
#&#39; A dataset containing the prices and other attributes of almost 54,000
#&#39; diamonds.
#&#39;
#&#39; &#64;format A data frame with 53940 rows and 10 variables:
#&#39; \describe{
#&#39; \item{price}{price, in US dollars}
#&#39; \item{carat}{weight of the diamond, in carats}
#&#39; ...
#&#39; }
#&#39; &#64;source \url{http://www.diamondse.info/}
"diamonds"

推荐阅读
  • LaTeX使用XeLaTeX入门基础(一)
    主机平台:GentooLinux11.2内核版本:LinuxKernel3.2.1编译环境:XeTeX3.1415926-2.3-0. ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • python3.7 安装pip3_python3的pip3安装
    ---恢复内容开始---pip3的安装需要对应一整套python的编译工具库,所以安装好的pip3是这个样子:inearAi:~$pip3-Vpi ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 我一直都有记录信息的习惯,不知是从什么时候开始,大约是在工作后不久。如今还真有点庆幸从那时开始记了点东西,当然是电子版的,写 ... [详细]
  • 实验2:Open vSwitch虚拟交换机实践   实验3:OpenFlow协议分析实践
    实验2:OpenvSwitch虚拟交换机实践一、实验目的能够对OpenvSwitch进行基本操作;能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;能够通 ... [详细]
author-avatar
黄可麟66032
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有