如何编写一个自动获取和展示疫情数据的 R 包?

如何编写一个自动获取和展示疫情数据的 R 包?

是不是总觉得会开发 R 包的都是大佬呢?其实你也可以,今天我们就为你揭开 R 包开发的神秘面纱!开发本文介绍的这个 R 包仅仅一些一些 R 语言的基础!

视频讲解

打开 RStudio

这是我的 RStudio 界面:

创建一个 R 包开发的 Project

运行:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

即可在 ~/Desktop/ncov 位置创建一个 R 包的项目了,创建好之后会自动打开这个项目:

注意到右上角:

查看创建的项目文件夹

我们可以从桌面上找到这个文件夹:

这个目录的结构是这样的:

1
2
3
4
5
6
$ tree
.
├── DESCRIPTION
├── NAMESPACE
├── R
└── ncov.Rproj

接下来的操作中我们只需要关注这两个文件(夹):DESCRIPTIONR

R 文件夹里面就是等下用来放 R 脚本文件的,我们先写个 Hello.R 放进去。

还是先创建一个包文档:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

使用下面的语句在 R 文件夹里面创建并打开 Hello.R 文件:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

Hello.R 的内容:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

运行 devtools::document() 创建函数文档(等下 ?hello 即可查看):

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

快速地安装这个 R 包:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

结果显示安装成功,下面使用这个包里面的函数:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

这样我们就写好这个最简单的 R 包了。创建源码包:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

然后创建得到的 ncov_0.0.0.9000.tar.gz 就是这个包的源码包了,你可以把这个文件分享给别人安装,安装方法:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

使用下面的方式可以把你的 R 包上传到 GitHub 上:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

最后一个选择 2 会重启 R 进程,再次打开的 RStudio 的右上角面板就变成了这样的:

多了一个 Git 表单。然后关于 Git 部分的操作就可以在这个表单里完成了,我不就不说这部分了,因为很多小伙伴可能还没用过 GitHub,所以我们还是回到 R 包的编写上。

先确认爬取疫情数据的函数还能正常运行

我们使用新浪新闻提供的接口,发现这个比较稳定,这个接口的爬取我之前有介绍过:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

看来还都很好用!下面我们把这些操作封装进 R 包里面。

首先我们创建一个 R6.R 文件,因为我想使用 R6 类去封装这些操作:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

然后在这个文件里面写上如下内容:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

R6 的使用非常简单,这里我只声明了 public 对象,然后使用 initialize 方法为所有的 public 对象进行赋值。在 R6 类的最后我添加了一个 plot() 方法,这个函数调用了 hchinamap 包的 hchinamap() 函数进行绘图。

下面运行:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

自动生成包文档。

然后再运行下面的代码进行安装:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

然后我们试试这个包的使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
library(ncov)
# 初始化一个 ncov 类的 df 变量
df <- ncov$new()

# df 里面就存储着所有我们需要的信息了,例如省份分布数据:
df$prov_distribution
#> # A tibble: 34 x 7
#> name ename value susNum deathNum cureNum city
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <list>
#> 1 北京 beijing 297 0 1 33 <df[,6] [15 × 6]>
#> 2 湖北 hubei 22112 0 618 819 <df[,6] [17 × 6]>
#> 3 广东 guangdong 1018 170 1 71 <df[,6] [20 × 6]>
#> 4 浙江 zhejiang 1006 0 0 101 <df[,6] [11 × 6]>
#> 5 河南 henan 914 0 3 70 <df[,6] [18 × 6]>
#> 6 湖南 hunan 772 0 0 104 <df[,6] [14 × 6]>
#> 7 重庆 chongqing 411 0 2 24 <df[,6] [39 × 6]>
#> 8 安徽 anhui 665 0 0 40 <df[,6] [16 × 6]>
#> 9 四川 sichuan 344 0 1 40 <df[,6] [21 × 6]>
#> 10 山东 shandong 379 0 0 31 <df[,6] [15 × 6]>
#> # … with 24 more rows

# 对 df 使用 plot() 方法
plot(df,
itermName = "确诊人数",
title = "新型冠状病毒肺炎确诊人数的分布",
subtitle = "TidyFriday Project",
theme = "sandsignika")

因为 plot() 方法调用的是 hchinamap() 函数,所以你可以把 hchinamap() 函数的参数传递进去(除了 region 参数,因为这里我传递的数据只有省份分布的数据)。

编写 ncov 包的 DESCRIPTION 文件

使用下面的命令把该包依赖的 R 包写入 DESCRIPTION 文件中的 Imports 字段下:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

再把你自己的信息和 R 包的一些信息填入 DES 就好了:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

注意,如果你想把你的 R 包发布在 CRAN 上,Description 字段应该是由多个句子组成的段落介绍,Title 字段应该是呀标题格式(该首字母大写的要大写)。

License 字段是声明该包的许可证的,这里我使用的是 MIT 许可 + 文件许可证,这个文件在的内容是:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

这是符合 CRAN 的要求的声明方式。

最后我们再看一下这个 R 包项目的结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ tree
.
├── DESCRIPTION
├── LICENSE
├── NAMESPACE
├── R
│   ├── Hello.R
│   ├── R6.R
│   └── ncov-package.R
├── man
│   ├── hello.Rd
│   ├── ncov-package.Rd
│   └── ncov.Rd
└── ncov.Rproj

打包或者上传到 GitHub 上就可以分享给别人使用了!

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

是不是觉得并不复杂呢?

作业

  1. 根据本文中介绍的 R 包开发流程开发一个自己的 R 包,功能不限,不一定要使用 R6 类进行封装,直接使用类似 Hello.R 这样的函数编写也可;
  2. 下载安装本文开发的 R 包,然后使用该包绘图展示疫情数据。

知识星球附件链接:https://t.zsxq.com/uNbI6i6

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×