目的

走一遍R包开发过程,并发布到Github上使用。

步骤

1. 创建R包框架

Rsutdio ——> File——> New Project——> New Directory ——> R Package



创建完成后,在R包文件夹下有如下文件(夹):

  • man: 存放*.Rd文件
  • R: 存放R脚本
  • DESCRIPTION: R包描述信息
  • NAMESPACE: 命令空间
  • rmytools.Rproj: R工程文件

2. 自定义R包

上面是Rstudio为开发者创建的一个框架,接下来是对自己开发的R包进行编写和注解。

①编写功能函数

点击Rstudio右下角Files中的R目录新建R函数(自带了一个hello.R)。要实现什么样的功能就编写相应函数,函数功能的组织和构建也是开发者重要的技能之一。这里作为示例,随便写了个画饼图的函数(因为现有画饼图的函数都不友好)。

  1. my_pie <- function(data,ncol){
  2. plotdat <- as.data.frame(table(data[,ncol])) %>% dplyr::arrange(-Freq)
  3. plotdat$Label <- paste(plotdat$Var1, paste0("(",round(((plotdat$Freq/sum(plotdat$Freq))*100),2),"%)"))
  4. p <- ggplot(plotdat, aes (x="", y = Freq, fill = factor(Var1))) +
  5. geom_col(position = 'stack', width = 1) +
  6. geom_text_repel(aes(label = Label, x = 1.3),size=5,
  7. position = position_stack(vjust = 0.5)) +
  8. theme_classic() +
  9. theme(plot.title = element_text(hjust=0.5),
  10. axis.line = element_blank(),
  11. axis.text = element_blank(),
  12. axis.ticks = element_blank()) +
  13. labs(fill = "Category",x = NULL,y = NULL) +
  14. coord_polar("y")
  15. }

与一般的函数编写不同的是,我们需要对这个函数编写文档,这就是为什么我们在用R包中函数时可用?来查看函数帮助。

编写完成后。。。

第一步,给函数添加注释,这里是对函数整体进行roxygen注释,方便文档生成,而非普通代码注释。光标放在函数名上,使用Ctrl+Shift+Alt+R快捷键即可生成一个基本模板,我们根据需要进行相应修改即可。

  1. #' Using a dataframe specific column to plot a pie figure
  2. #'
  3. #' @param data a dataframe or tibble
  4. #' @param ncol specific column, factor
  5. #'
  6. #' @return a figure as ggplot2 object
  7. #' @export
  8. #'
  9. #' @examples
  10. #' my_pie(mtcars,ncol=2)
  11. #' my_pie(diamonds,ncol=3)
  12. #' my_pie(diamonds,ncol=3)+guides(fill="none")
  13. #'
  14. my_pie <- function(data,ncol){
  15. plotdat <- as.data.frame(table(data[,ncol])) %>% dplyr::arrange(-Freq)
  16. plotdat$Label <- paste(plotdat$Var1, paste0("(",round(((plotdat$Freq/sum(plotdat$Freq))*100),2),"%)"))
  17. p <- ggplot(plotdat, aes (x="", y = Freq, fill = factor(Var1))) +
  18. geom_col(position = 'stack', width = 1) +
  19. geom_text_repel(aes(label = Label, x = 1.3),size=5,
  20. position = position_stack(vjust = 0.5)) +
  21. theme_classic() +
  22. theme(plot.title = element_text(hjust=0.5),
  23. axis.line = element_blank(),
  24. axis.text = element_blank(),
  25. axis.ticks = element_blank()) +
  26. labs(fill = "Category",x = NULL,y = NULL) +
  27. coord_polar("y")
  28. }

第二步,运行devtools::document(),会在man文件夹下生成该函数的Rd文件:

如果修改了函数的注释,需要重新执行第二步。

每个函数都是这样添加注释和文档,比如再添加一个ID转换的函数:

②修改DESCRIPTION

点击右下角Files中的DESCRIPTION对模块进行修改。



添加一些主要的信息即可:

  • Package: 包名
  • Description: 描述信息
  • Depends: 依赖R版本(要注意空格,否则后续会报错)
  • Suggest:建议包,非必需
  • Imports:依赖包(这里编写的函数依赖了图中5个R包)
  • License:协议

③安装R包

Rstudio ——> Build,可构建源码包或者二进制包。



点击后会进行编译以及更新文档。

使用?my_pie等编写的函数,已经可以查看文档了,说明编译成功,已经可以使用R包了。

3. 上传Github

如果只是自己使用,可以放在本地。本着R语言开源精神,要想分享给其他人使用,需要有地方托管。权威认可的地方如CRAN、Bioconductor等,但如果专业度不够高或者处于开发阶段,还是托管在Github上吧。

从本地仓库上传到Github远程仓库,与一般代码上传无异。

首先,进入本地R包目录。

  1. git init
  2. git add .
  3. git commit -m 'my first r package'

然后,登录Github新建Repository(建议用SSH地址,尽量不要用HTTPS地址)。

第三,本地仓库关联GitHub,上传代码。

  1. git remote add origin git@github.com:***/test.git
  2. git pull origin master #先pull下
  3. git push -u origin master

有个小插曲,我在pull的过程中,遇到了如下错误:



原因是SSH keys没有设置或者过期了,SSH keys 可以在没有密码的情况下信任当前工作的计算机。解决办法是生成并设置SSH keys。具体可参考这篇教程:解决github Permission denied (publickey)问题。

上传成功。

4. 安装使用

devtools工具为我们提供了Github的R包安装方式:

  1. devtools::install_github("**/my_rpackage/rmytools")
  2. library(rmytools)

用内置数据集试下:

  1. my_pie(mtcars,2)
  2. my_pie(diamonds,ncol=3)
  3. my_pie(diamonds,ncol=3)+guides(fill="none") #ggplot2对象,自由编辑

用R包来管理组织自己平时经常用的代码是一种非常高效的方式,后续想添加任何功能或修改原有脚本,只需git push,重新装一下R包即可。是时候整理整理之前混乱的代码了(俗称屎山)。

Ref:

Kai Gu:如何快速写一个R包

如何上传本地代码到github

R包开发过程记录的更多相关文章

  1. 机器学习数据集,主数据集不能通过,人脸数据集介绍,从r包中获取数据集,中国河流数据集

    机器学习数据集,主数据集不能通过,人脸数据集介绍,从r包中获取数据集,中国河流数据集   选自Microsoft www.tz365.Cn 作者:Lee Scott 机器之心编译 参与:李亚洲.吴攀. ...

  2. 极简 R 包建立方法--转载

    https://cosx.org/2013/11/building-r-packages-easily/ 最近想试一下捣腾一个 R 包出来,故参考了一些教程.现在看到的最好的就是谢益辉大大之前写过的开 ...

  3. 如何创建R包并将其发布在 CRAN / GitHub 上--转载

    转载--https://www.analyticsvidhya.com/blog/2017/03/create-packages-r-cran-github/ 什么是 R 包?我开始创建 R 包的原因 ...

  4. 如何制作自己的R包?

    摘自 方匡南 等编著<R数据分析-方法与案例详解>.电子工业出版社 R包简介 R包提供了一个加载所需代码.数据和文件的集合.R软件自身就包含大约30种不同功能的包,这些基本包提供了R软件的 ...

  5. 如何制作自己的R包

    如何制作自己的R包? 摘自 方匡南 等编著<R数据分析-方法与案例详解>.电子工业出版社 R包简介 R包提供了一个加载所需代码.数据和文件的集合.R软件自身就包含大约30种不同功能的包,这 ...

  6. R语言无网络安装R包,彻底解决依赖问题!

    R version: 3.5.3, 3.6.3 更新日期: 2020-9-10 大家测试后多提建议哈, 有问题我会持续更新的 在工作中,我们使用的服务器通常是不能联外网的,这在安装R包的时候产生了巨大 ...

  7. R包MetaboAnalystR安装指南(Linux环境非root)

    前言 这是代谢组学数据分析的一个R包,包括用于代谢组学数据分析.可视化和功能注释等众多功能.最近有同事在集群中搭建蛋白和代谢流程,安装这个包出现了问题,于是我折腾了一上午. 这个包的介绍在:https ...

  8. 普通用户安装 R 包

    转自 http://bnuzhutao.cn/archives/901 一般 R 语言的书籍上,介绍安装 R 包的方法都是这样的: install.packages("packagename ...

  9. R包介绍

    R语言的使用,很大程度上是借助各种各样的R包的辅助,从某种程度上讲,R包就是针对于R的插件,不同的插件满足不同的需求,截至2013年3月6日,CRAN已经收录了各类包4338个. 一. R语言包的安装 ...

随机推荐

  1. 计算机网络之介质访问控制(静态划分信道、FDM、TDM、STDM、WDM、CDM)、(动态划分信道、ALOHA、CSMA、CSMA/CD、CSMA/CA)、令牌传递协议

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/104935912 学习课程:<2019王道考研计算机网络> 学习目的 ...

  2. Nginx(一):初识Nginx

    一.什么是Nginx? Nginx 是异步框架的Web服务器,也可以用作反向代理.负载平衡器和HTTP缓存.选择Nginx的一些优点:可以高并发连接.内存消耗少.成本低廉.配置文件简单.节省带宽.稳定 ...

  3. 【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑

    编写Java Spring Boot应用,通过配置logging.path路径把日志输出在指定的文件夹中. 第一步:通过VS Code创建一个空的Spring Boot项目 第二步:在applicat ...

  4. set prompt = "任意匹配字符" 当前目录详解

    转载:https://blog.csdn.net/alexdream/article/details/6865730 研究了两天的FreeBSD,总是感觉输入提示符那里怪怪的,而且默认的提示符还不带显 ...

  5. JAVA笔记12__字节、字符缓冲流/打印流/对象流/

    /** * !!:以后写流的时候一定要加入缓冲!! * 对文件或其它目标频繁的读写操作,效率低,性能差. * 缓冲流:好处是能更高效地读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来. * * ...

  6. POJ 2536 Gopher II(二分图最大匹配)

    题意: N只地鼠M个洞,每只地鼠.每个洞都有一个坐标. 每只地鼠速度一样,对于每只地鼠而言,如果它跑到某一个洞的所花的时间小于等于S,它才不会被老鹰吃掉. 规定每个洞最多只能藏一只地鼠. 问最少有多少 ...

  7. 第01课 OpenGL窗口(1)

    教程的这一节在2000年一月彻底重写了一遍.将会教您如何设置一个 OpenGL窗口.它可以只是一个窗口或是全屏幕的.可以任意 大小.任意色彩深度.此处的代码很稳定且很强大,您可以在您所有的OpenGL ...

  8. linux 内核源代码情景分析——linux 内核源码中的汇编语言代码

    1. 用汇编语言编写部分核心代码的原因: ① 操作系统内核中的底层程序直接与硬件打交道,需要用到一些专用的指令,而这些指令在C语言中并无对应的语言成分: ② CPU中的一些特殊指令也没有对应的C语言成 ...

  9. DDL数据定义语言

    DDL数据定义语言 (一)概述 DDL(Data Definition Language):数据定义语言,用来定义数据库对象,库.表.列等:创建.删除.修改 库,表结构.主要分为操作数据库的DDL和操 ...

  10. [python]Pytest+selenium+git+jenkins持续集成

    1安装pytest框架 &pip install pytest   #pytest &pip install pytest-html  #pytest html测试报告 2.工程介绍 ...