Searching for R Packages
2018-10-24 本文已影响18人
Liam_ml
对于新用户和有经验的R用户来说,搜索R包是一个棘手的问题。CRAN上已经有超过13,000个软件包,新软件包的价格接近每月200个,因此无法跟上。包名几乎可以是任何东西,并且它们很少提供信息,因此按名称搜索几乎没有帮助。
幸运的是,如果你知道在哪里看,包开发者提供了一些非常有用的工具。:)这篇文章提出了一些相对较新的软件包的搜索策略。
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)
今年 7月出现在CRAN上的packagefinder v0.0.7正确地解决了问题的核心并显示了很大的希望。
允许您通过所有CRAN包的元数据进行关键字搜索。
pt_pkg <- as.tibble(findPackage("permutation test"))
##
## 59 out of 13256 CRAN packages found in 6 seconds.
pt_pkg
## # A tibble: 59 x 5
## SCORE NAME DESC_SHORT DOWNL_TOTAL GO
## <dbl> <chr> <chr> <S3: format> <fct>
## 1 100 permutes Permutation Tests for Time Series … NA 8300
## 2 75 AUtests Approximate Unconditional and Perm… NA 502
## 3 75 jmuOutlier Permutation Tests for Nonparametri… NA 5564
## 4 75 lmPerm Permutation Tests for Linear Models NA 6083
## 5 75 NetRep Permutation Testing Network Module… NA 7453
## 6 75 perm Exact or Asymptotic permutation te… NA 8289
## 7 75 permDep Permutation Tests for General Depe… NA 8292
## 8 75 permuco "Permutation Tests for Regression,… NA 8297
## 9 75 RATest Randomization Tests NA 9287
## 10 75 treeperm Exact and Asymptotic K Sample Perm… NA 12442
## # ... with 49 more rows
接下来只选取需要使用的列:
pt_pkg <- select(pt_pkg, NAME, DESC_SHORT)
现在我们有一个感兴趣的包列表,最好能够指出所选包的质量和实用性。有用性的自然衡量标准是下载包的次数。
为此,我们使用包中的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))
![](https://img.haomeiwen.com/i2562595/2ea67c7ae653e224.png)
衡量软件包质量和可靠性的一种方法是查看有多少其他软件包依赖它。
同样地,了解作者的背景,他或她编写其他R包的经验,以及他或她可能与之合作的着名R开发人员也有助于评估是否给出新发现的包是值得一试的。
在大多数情况下,背景调查并不那么容易。但是,借助于包中的中的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)
![](https://img.haomeiwen.com/i2562595/d5dd71f666be0732.png)
知道最多产的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)
![](https://img.haomeiwen.com/i2562595/c67b80bd1f4fc98b.png)