【问题标题】:How can I list packages not included in any R task view?如何列出未包含在任何 R 任务视图中的包?
【发布时间】:2011-09-01 23:38:05
【问题描述】:

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

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

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

更新 2:我忽略了链接到 ctv。如果您喜欢任务视图,包文档会很有趣。

【问题讨论】:

    标签: r cran


    【解决方案1】:

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

    在您的情况下,您可能希望计算available.packages() 获得的内容与您从ctv 包中获得的关于任务视图选择的差异。

    编辑 1 您的“更新 1”想法很粗糙。太粗暴了。 CRAN 的元信息来自,我认为,适当地考虑元信息:第一组是所有包,每个任务视图的添加集,可能分为“列出”和“推荐”并聚合起来。

    编辑 2 我认为您只是使用来自 ctv 的代码来解析它的文件,出来集合。我们在cran2deb 中使用它来定义更小的测试集来创建包。给定该集合(和其他数据),他们可以生成网页。我认为您可能使事情过于复杂。 R 使这成为可能,因为我也非常了解 ;-)

    【讨论】:

    • +1 你会知道的。 :-) 你知道“视图中”是如何设置的吗?我想 CRAN 总部的幕后有一点魔法,只要我能解锁神奇的 SQL 查询。
    • 您写编辑的速度比我提交评论的速度要快。 :)
    【解决方案2】:

    我应该更仔细地阅读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 &lt;- setdiff(aggInViews, availPkgs)。其中一些是基础 R 中的包。其他的是 ???谁知道呢。

    【讨论】:

    • 你从我这里得到一个坚定的'yup' :)
    • 奖励积分:有人可以使用这个集合并构建一个多类分类器,根据依赖关系、建议、作者和关键字匹配为不同的包建议潜在的任务视图(对于 NLP 人群:) )。
    猜你喜欢
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多