Доступные виньетки CRAN

Там есть available.packages() функция для перечисления всех пакетов, доступных на CRAN. Есть ли подобная функция для поиска всех доступных виньеток? Если нет, то как мне получить список всех виньеток и пакетов, с которыми они связаны?

В качестве углового случая, чтобы иметь в виду data.table Пакет имеет 3 виньетки, связанные с ним.

РЕДАКТИРОВАТЬ: Ответ Пер Андри я понимаю, что я не был ясен. Я знаю о функции виньетки для поиска всех доступных локальных виньеток, я хочу найти все виньетки всех пакетов на CRAN.

2 ответа

Решение

Кажется, я вспоминаю, как смотрел на это в ответ на какой-то вопрос SO (не могу найти его сейчас) и решил, что, поскольку информация не включена в вывод available.packages()ни в результате применения readRDS в @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 $$...)

edit: обернул загрузку и readRDS в функцию, так что я могу обернуть все это в try

Функции 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 
Другие вопросы по тегам