如何列出未包含在任何R任务视图中的软件包?

Ite*_*tor 4 r cran

我最近一直在仔细查看R任务视图,并发现一些感兴趣的软件包不包含在任何任务视图中.是否有既定的方法来查找任务视图中列出的软件包的补充?

我意识到通过XML和处理ctv文件(例如http://cran.r-project.org/web/views/Econometrics.ctv),我可以找到<packagelist>节点中列出的所有包的联合,那available.packages()可以列出所有可供下载的软件包.这是诀窍,还是我错过了使用像CRANberriesCRANtastic这样的网站的一些技巧?

更新1(不要这样做 - 请参阅下面的答案):我忽略了提到CRAN列出了"在视图中:"的包.因此,似乎在幕后,一些信息会将包与它们所在的视图进行匹配.可以轻松(并且粗鲁地)刮掉所有CRAN包页面并grep"In views:".这是我最初的想法,直到我遇到ctv,这更优雅.

更新2:我忽略了链接到ctv.如果你进入任务视图,那么包文档很有趣.

Dir*_*tel 6

没有隐藏的技巧,只需重新创建类似CRANberries的东西(通过调用available.packages()和比较它存储在本地数据库中的状态数据开始).

在您的情况下,您可能希望计算available.packages()得到的内容与从ctv任务视图选项中获得的内容之间的集合差异.

编辑1您的"更新1"想法很粗糙.太粗糙了.CRAN中的元信息来自于,正确地考虑了元信息:首先是所有包,每个任务视图的添加集,可能在"列出"和"推荐"之间进行分割并汇总.

编辑2我认为你只是使用代码ctv来解析它的文件,来自集合.我们使用它cran2deb来定义用于包创建的较小测试集.给定该集合(和其他数据),他们可以生成网页.我想你可能会让事情变得过于复杂.R使这成为可能,因为我也知道太好了;-)


Ite*_*tor 6

我应该ctv更仔细地阅读文档.答案就在那里:有一个.rds文件被调用Views.rds.这是一个循序渐进的方法:

myRepos         <- "http://cran.r-project.org"
tmpfile         <- tempfile()
download.file(paste(myRepos, "src/contrib/Views.rds", sep = "/"), destfile = tmpfile)

myViews         <- .readRDS(tmpfile)
func_listPkgs   <- function(x){return(x$packagelist$name)}
aggRaw          <- lapply(myViews, func_listPkgs)
aggInViews      <- unique(unlist(aggRaw))

availRaw        <- available.packages(contriburl = paste(myRepos, "src/contrib", sep = "/"))
availPkgs       <- rownames(availRaw)
notInViews      <- setdiff(availPkgs, aggInViews)
Run Code Online (Sandbox Code Playgroud)

这是这样做的:

  1. Views.rds从CRAN镜像获取文件.
  2. 它将Views.rds加载到数据框中.注意:在2.13之前,需要使用.readRDS,现在readRDS使用2.13. .readRDS仍然有用,虽然它已被弃用.
  3. 它获取可用包的列表.这可以更直接:有一个名为Packages.gz可以下载的文件,但我们必须解析它.让我们坚持使用已有的工具.:)
  4. 它在两个列表上运行差异.为了好玩,尝试相反的差异:oddPackages <- setdiff(aggInViews, availPkgs).其中一些是基地R的包.其他是??? 谁知道.

  • 对于奖励积分:有人可以使用此集合并构建一个多类分类器,根据依赖关系,建议,作者和关键字匹配(针对NLP人群:))建议针对不同包的潜在任务视图. (2认同)