如何搜索你想要的R包()

作者:Joseph Rickert
翻译:黄小伟,先后从事游戏、社交及金融数据研究及应用,目前就职杭州有赞
一. 概述
对于R用户而言,想找到所需要的R包都是一件极为麻烦的事情!目前,CRAN已经收录超过13,000个R包,而且已每月200左右的速度增加。但是R包的命名一般都是根据作者喜好,缺少针对性信息,使得通过名称查询变得低效。
针对该问题,R包的开发者也提供了一些有用的工具,以下针对该方法做简单介绍。
cranly:你的R包管理工具
二. 使用说明
library(tidyverse)
── Attaching packages ─── tidyverse 1.2.1 ── ? ggplot2 2.2.1 ? purrr 0.2.4 ? tibble 1.4.2 ? dplyr 0.7.5 ? tidyr 0.8.1 ? stringr 1.3.1 ? readr 1.1.1 ? forcats 0.3.0 ── Conflicts ──── tidyverse_conflicts() ── ? dplyr::filter() masks stats::filter() ? dplyr::lag() masks stats::lag() library(packagefinder)
library(dlstats)
library(cranly)
packagefinder在7月份收录于CRAN,主要功能是帮助R使用者找到能够解决燃眉之急的R包。packagefinder::findPackage() 支持通过关键词搜素CRAN上所有R包的元数据。
假如要进行Permutation Tests(置换检验),可以输入你能想到的、最直接的搜索内容,比如coin(Thomas Leeper提到过的一个置换检验的例子中使用了coin包),这也是一个很清晰的暗示,你期望在所有结果中找到带有coin关键词的包。
如何搜索你想要的R包()
文章图片
image 不幸的是,这个软件包非常新,而且没有详细记录。目前尚不清楚如何计算SCORE,DOWNL_TOTAL充满了NAs。 但该功能似乎确实找到了包。 请注意,findPackage()允许用户设置权重参数,该参数会影响搜索“如何命中包的标题,简短描述和长描述”。
下一行代码只选择我们将使用的列。
pt_pkg <- select(pt_pkg, NAME, DESC_SHORT)
现在我们有一个感兴趣的包列表,最好能够指出所选包的质量和实用性。 有用性的自然衡量标准是下载包的次数。 为此,我们转向dlstats包中的cran_stats()函数。 此函数将包名称向量作为输入,查询RStudio下载日志,并返回一个数据框,列出每个包的月份下载次数。
pt_downloads <- cran_stats(pt_pkg$NAME)
dim(pt_downloads)
[1] 2784 4 head(pt_downloads)
start end downloads package 4485 2018-05-01 2018-05-31 52 permutes 4544 2018-06-01 2018-06-30 89 permutes 4603 2018-07-01 2018-07-31 92 permutes 4662 2018-08-01 2018-08-31 74 permutes 4721 2018-09-01 2018-09-30 227 permutes 4780 2018-10-01 2018-10-22 142 permutes 只需进行一些整理就可以生成一个数据框,其中列出了每个包在其生命周期内的总下载量。
top_downloads <- pt_downloads %>% group_by(package) %>%
summarize(downloads = sum(downloads)) %>%
arrange(desc(downloads))
head(top_downloads,10)
# A tibble: 10 x 2 ## package downloads 1 coin 1103426 2 exactRankTests 137674 3 RVAideMemoire 108837 4 perm 97071 5 logcondens 83033 6 HardyWeinberg 55735 7 biotools 47694 8 smacof 45257 9 SNPassoc 38920 10 broman 30956 正如预期的那样,coin已经排到了榜单的首位。 随着时间的推移绘制下载量表明该软件包在过去五年中越来越受欢迎,看起来人们在过去一年左右的时间里进行了大量的置换检验。
top_pkgs <- pt_downloads %>% filter(package %in% top_downloads$package[1:3])
ggplot(top_pkgs, aes(end, downloads, group=package, color=package)) + geom_line() + geom_point(aes(shape=package))
如何搜索你想要的R包()
文章图片
image 同时,衡量R包质量和可靠性的另一种方法是查看有多少其他软件包依赖它。 这些包将在包的CRAN页面上列为“反向依赖”和“反向导入”,通过链接(https://cran.r-project.org/package=coin),我们看到coin页面上的这些字段中列出了24个包。
同样地,了解作者的背景、编写其他R包的经验、可能与之合作的着名R开发人员等信息,也有助于评估是否给出新发现的包是值得一试的。 上面的相同链接也显示了包的作者。 检查R项目的贡献者页面,我们看到两位作者是R Core的成员,背景和合作者不可能更好。
在大多数情况下,背景调查并不那么容易。 但是,借助函数cranly::build_network(),可以轻松跟踪作者的协作网络。 在这里,我们看到Torston拥有广泛的合作者网络。
p_db <- tools::CRAN_package_db()
clean_p_db <- clean_CRAN_db(p_db)
author_net <- build_network(object = clean_p_db, perspective = "author")
plot(author_net, author = "Torsten Hothorn", exact = FALSE)
cranly collaboration network
CRAN database version
Mon, 22 Oct 2018, 11:52
Author names with
"Torsten Hothorn"
Package names with
"Inf"
如何搜索你想要的R包()
文章图片
image 知道最多产的CRAN包作者是谁也是有帮助的。
author_summary <- summary(author_net)
Warning in closeness(cranly_graph, normalized = FALSE): At centrality.c: 2784 :closeness centrality is not well-defined for disconnected graphs plot(author_summary)
如何搜索你想要的R包()
文章图片
image 以前的文章更深入地探讨了cranly包和tools:: CRAN_package_db(),但还有更多要探索的内容。
【如何搜索你想要的R包()】CRAN任务视图(https://cran.r-project.org/web/views/)也是很有用的,这些是由专家指导的包装清单,并组织到功能区域。只要稍加搜索,你就会发现coin出现在多个任务视图中。

    推荐阅读