如何搜索你想要的R包?

浏览: 1912

作者: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关键词的包。



不幸的是,这个软件包非常新,而且没有详细记录。目前尚不清楚如何计算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 

##    <fct>              <int> 

##  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包质量和可靠性的另一种方法是查看有多少其他软件包依赖它。 这些包将在包的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"


知道最多产的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)

以前的文章更深入地探讨了cranly包和tools:: CRAN_package_db(),但还有更多要探索的内容。

CRAN任务视图(https://cran.r-project.org/web/views/)也是很有用的,这些是由专家指导的包装清单,并组织到功能区域。只要稍加搜索,你就会发现coin出现在多个任务视图中。

推荐 1
本文由 R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册