我一直在寻找各种方法来查找有关R包的信息,但我最近才了解CRAN_package_db()了基本tools包中的函数。如果一位同事没有向我指出,我确信我永远不会自己找到它。
当被调用时,这个函数发送到由环境变量指定的CRAN镜像,R_CRAN_WEB并返回一个数据帧,其中包含有关CRAN上当前每个包的大量信息。它是元数据的宝库。
作为处理角色数据的一个例子。我有兴趣了解编写典型R包所需的协作感,以及感受其他包开发人员对包的适用性。我选择进行协作的代理是每个软件包列出的作者数量。我对其他软件包开发人员有用的代理是反向依赖和反向导入的联合。
我做的第一件事是选择数据框的一个子集来处理。
## Observations: 12,123## Variables: 6## $ Package"A3", "abbyyR", "abc", "abc.data", "ABC.RAP", "ABCanal...## $ Dep"R (>= 2.15.0), xtable, pbapply", "R (>= 3.2.0)", "R (...## $ ImpNA, "httr, XML, curl, readr, plyr, progress", NA, NA, ...## $ Aut"Scott Fortmann-Roe", "Gaurav Sood [aut, cre]", "Csill...## $ RDNA, NA, "abctools, EasyABC", "abc", NA, NA, NA, NA, NA...## $ RI NA, NA, "ecolottery", NA, NA, NA, NA, NA, NA, NA, NA, ...
请注意,在这篇文章中,我正在使用我刚刚讲话之前从CRAN提取的一个文件中的数据,但您应该没有任何问题CRAN_package_db()来获取更新的数据集。
接下来我做的是向数据集中添加两个新变量:DepImp依赖包和导入包RDRI的联合,以及反向联合依赖并反向导入包。
另外,事实证明,作者字段需要一些工作,以便从作者字符串中删除像“[aut,cre]”和“[ctb,cph]”这样的限定性文本。
一旦我有了一些干净的文本,我使用了以下代码的非常混乱的初步版本来获取我正在查找的计数数据。请注意,派生的特性DepImp以及RDRI需要的某些预处理与从我选择的其他特性中提取计数所需的预处理不同。在这里,我做了一件非常不整洁的事情,并创建了两个初步的数据框架 - 效率不高,但对我来说更容易完成和调试。
## Package Aut Dep Imp RD RI DepImp RDRI## 1 A3 1 3 0 0 0 3 0## 2 abbyyR 1 1 6 0 0 7 0## 3 abc 4 6 0 2 1 6 3## 4 abc.data 4 1 0 1 0 1 1## 5 ABC.RAP 4 1 3 0 0 4 0## 6 ABCanalysis 3 1 1 0 0 2 0
一旦我有了清晰的数据,计算一些简单的统计数据就变得微不足道了。在这里,我们看到手段和中位数的数字很小,但是反向依赖和反向进口以及它们的联合的标准偏差反映了相当大的差异。
## Features mean sd median## 1 Aut 2.25 2.73 1## 2 Dep 1.53 1.57 1## 3 Imp 2.85 3.89 1## 4 RD 0.81 9.09 0## 5 RI 2.30 23.23 0## 6 DepImp 4.37 4.06 3## 7 RDRI 3.11 30.79 0
在A一目了然RDRI位数表明,这种变化是由于比较少的包。直方图表示很长的尾巴。
## 0% 25% 50% 75% 100%## 0 0 0 0 1239 ## Warning: Removed 4 rows containing non-finite values (stat_bin). ## Warning: Removed 1 rows containing missing values (geom_bar).
对RDRI字段进行排序可找到前15个最集成的软件包。由此,我的意思是最依赖或由其他软件包导入的软件包。
## Package Aut DepImp RDRI## 1 Rcpp 7 3 1239## 2 MASS 6 6 1157## 3 MASS 6 6 1157## 4 ggplot2 3 11 1149## 5 dplyr 5 12 716## 6 Matrix 13 7 680## 7 Matrix 13 7 680## 8 plyr 1 2 555## 9 stringr 2 3 500## 10 mvtnorm 9 3 483## 11 magrittr 1 0 454## 12 survival 2 7 434## 13 survival 2 7 434## 14 jsonlite 3 1 426## 15 httr 2 6 420
最后,查看作者领域的分位数和直方图给出了一些合作的想法。大多数软件包的作者少于三位,表明只有非常适度的协作。
## 0% 25% 50% 75% 100%## 1 1 1 3 97 ## Warning: Removed 9 rows containing non-finite values (stat_bin).
我希望提供的软件包元数据的简单可用性CRAN_package_db()将激发一些分析R软件包特性的认真工作。