可用的CRAN小插曲

Tyl*_*ker 5 vignette r cran data.table

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

作为一个角落的情况要记住,data.table包装有3个与之相关的小插图.

编辑:Per Andrie的回答我意识到我不清楚.我知道用于查找所有可用的本地小插图的插图功能,我正在寻找获得CRAN上所有包的所有小插图的方法.

Ben*_*ker 5

我似乎记得在回应一些问题,SO看着这个(现在不能找到它),并决定,由于信息不输出包括available.packages(),也不在适用的结果readRDS@CRAN/web/packages/packages.rds(从吉荣奥姆斯一招) ,我想不出一个不刮的方式来做...

这是我的刮刀,应用于前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")])
Run Code Online (Sandbox Code Playgroud)

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

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