2011-09-01 38 views
4

最近我一直在寻找R Task Views,并发现一些感兴趣的包不包含在任何任务视图中。是否有一种确定的方式来查找任务视图中列出的包的补充?如何列出未包含在任何R任务视图中的软件包?

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

更新1(不要这样做 - 请参阅下面的答案):我忽略了提及CRAN在包中列出了“In views:”。所以,看起来幕后的一些信息与包中的视图保持一致。人们可以很容易地(粗鲁地)抓取所有CRAN包页面,并且grep为“In views:”。这是我最初的想法,直到我遇到了ctv,这是更优雅。

更新2:我忽略链接到ctv。如果您进入任务视图,包文档很有意思。

回答

6

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

对于您的情况,您可能需要计算available.packages()所得到的结果与您从ctv软件包获得的有关任务视图选项的结果之间的差异。

编辑1您的'更新1'的想法是粗糙的。太粗鲁了。 CRAN中的元信息来源于methinks,它适当地说明了元信息:第一组是所有包,每个任务视图的添加集,可能在“列出”和“推荐”之间进行分组并汇总。

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

+0

+1你会知道的。 :-)你知道“In views”是如何设置的吗?我想在CRAN HQ的幕后有一些魔力,只要我能解开神奇的SQL查询。 – Iterator

+0

编写编辑的速度比我在提交评论时要快。 :) – Iterator

6

我应该更仔细地阅读ctv文档。答案就在那里:有一个名为Views.rds的.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) 

下面是这是这样做的:

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

你从我那里得到一个坚定的'yup':) –

+2

对于奖金信用:有人可以利用这个集合并根据依赖关系,建议,作者以及建立一个多级分类器来建议不同包的潜在任务视图关键字匹配(针对NLP人群:))。 – Iterator

相关问题