【问题标题】:available CRAN vignettes可用的 CRAN 小插曲
【发布时间】:2012-05-31 00:17:32
【问题描述】:

available.packages() 函数可以列出 CRAN 上所有可用的软件包。是否有类似的功能来查找所有可用的小插图?如果不是,我将如何获得所有小插曲及其关联的包的列表?

请记住,data.table 包有 3 个与之关联的小插曲。

编辑:根据安德烈的回答,我意识到我并不清楚。我知道用于查找所有可用本地小插图的小插图功能,我正在寻找一种方法来获取 CRAN 上所有包的所有小插图。

【问题讨论】:

  • 你可以解析(例如使用XMLRCurl)CRAN 上的所有包索引,尽管我很确定系统管理员不会喜欢这个想法。
  • 我似乎记得在回答一些 SO 问题(现在找不到)时查看此信息并决定因为该信息未包含在 available.packages() 的输出中,也不包含在将readRDS 应用于@CRAN/web/packages/packages.rds 的结果(来自 Jeroen Ooms 的一个技巧),我想不出一种不刮擦的方法......
  • 这将是用于 CRAN 的包的一部分,因此抓取方法不是最好的方法,除非......我可以抓取一次并将信息作为数据集存储在获取的包中随包的每个新版本更新。也许是一种可能性。
  • @BenBolker 您能否将该评论添加为答案,以便我接受?不是我希望的答案,但认为可能是可能的结果。

标签: r data.table cran vignette


【解决方案1】:

我似乎记得在回答一些 SO 问题(现在找不到)时查看此信息并决定因为该信息未包含在 available.packages() 的输出中,也未包含在应用 @987654322 的结果中@ to @CRAN/web/packages/packages.rds(来自 Jeroen Ooms 的一个技巧),我想不出一种不刮擦的方法......

这是我的刮刀,应用于前 100 个包(导致 44 个小插图)

pkgs <- unname(available.packages()[, 1])[1:100]
vindex_urls <- paste0(getOption("repos"),"/web/packages/", pkgs, 
    "/vignettes/index.rds", sep = "")
getf <- function(x) {
      ## I think there should be a way to do this directly
      ## with readRDS(url(...)) but I can't get it to work
    suppressWarnings(
              download.file(x,"tmp.rds",quiet=TRUE))
    readRDS("tmp.rds")
}
library(plyr)
vv <- ldply(vindex_urls,
            .progress="text",
            function(x) {
                if (inherits(z <- try(getf(x),silent=TRUE),
                    "try-error")) NULL else z
            })
tmpf <- function(x,n) { if (is.null(x)) NULL else
                            data.frame(pkg=n,x) }
vframe <- do.call(rbind,mapply(tmpf,vv,pkgs))
rownames(vframe) <- NULL
head(vframe[,c("pkg","Title")])

可能有一些方法可以清理它/使它更紧凑,但它似乎工作正常。您的一次刮擦/偶尔更新策略似乎是合理的。或者,如果您愿意,您可以每天(或每周或任何看起来合理的方式)抓取并将结果保存/发布到可公开访问的地方,然后在包中包含一个带有硬编码该 URL 的函数……甚至创建一个格式良好的 HTML 表,带有链接,全世界都可以使用(然后将伟哥广告添加到页面,然后 $$PROFIT$$ ...)

编辑:将下载和 readRDS 包装在一个函数中,所以我可以将整个内容包装在 try

【讨论】:

  • 我想我将使用这个或修改版本,并将输出作为数据集包含在包中。谢谢你,不过我可能会放弃伟哥的广告。
  • 我试过上面的功能,遇到了问题。当您使用paste0 时,我删除了, sep = ""。但是当我尝试运行 v v 部分时。它停在 20% 并给我以下错误:Error in the readRDS (tmp.rds) : error reading from the connection 关于如何克服这个问题的任何想法?我做错了什么?
  • 不知道。也许某处有损坏的 index.rds 文件?您可以在readRDS 周围添加另一个try 语句以跳过它...因为该函数使用ldply,它无法访问当前正在处理的包的名称;可能值得把它吸起来并使用for 循环来提高透明度......
  • 这使我可以继续运输,但随后会引发错误:Error in list_to_dataframe(res, attr(.data, "split_labels")) : Results must be all atomic, or all data frames
  • 您需要检查try(readRDS(...)) 的结果并在错误时返回NULL。我会尝试编辑。
【解决方案2】:

函数vignette()browseVignettes() 列出您机器上安装的所有软件包的小插曲。

vignette(package="data.table")

Vignettes in package ‘data.table’:

datatable-faq                         Frequently asked questions (source, pdf)
datatable-intro                       Quick introduction (source, pdf)
datatable-timings                     Timings of common tasks (source, pdf)

browseVignettes() 特别有用,因为它会创建一个带有超链接的网页:

browseVignettes(package="data.table")

Vignettes found by browseVignettes(package = "data.table")

Vignettes in package data.table

Frequently asked questions - PDF  R  LaTeX/noweb 
Quick introduction - PDF  R  LaTeX/noweb 
Timings of common tasks - PDF  R  LaTeX/noweb 

【讨论】:

  • 谢谢安德烈,我实际上是在寻找 CRAN 必须提供的完整的小插曲列表,而不仅仅是本地安装的软件包。我认为这可能比我希望的要困难一些。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 2014-05-04
  • 1970-01-01
  • 2017-12-18
相关资源
最近更新 更多