2012-05-31 2 views
5

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

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

EDIT: Ответ от Андри Я понимаю, что я не был ясен. Я знаю о функции виньетки для поиска всех доступных локальных виньет, после того, как я смогу получить все виньетки всех пакетов на CRAN.

+1

Вы можете разобрать (например, с 'XML' и' RCurl') все индексы пакета на CRAN, хотя я уверен, что системные администраторы не любят эту идею. – daroczig

+0

Кажется, я вспоминаю об этом в ответ на какой-то вопрос SO (не могу найти его сейчас) и решив, что, поскольку информация не включена в вывод 'available.packages()', а также в результате применения 'readRDS' в' @ CRAN/web/packages/packages.rds' (трюк от Jeroen Ooms), я не мог думать о том, как это сделать ... –

+0

Это будет часть пакета, который предназначен для CRAN, поэтому метод скремблирования - это не лучший подход, если ... Я мог бы очистить один раз и сохранить информацию в виде набора данных в пакете, который обновляется с каждой новой версией пакета. Возможно, возможно. –

ответ

5

Я припоминаю, глядя на это в ответ на какой-то вопрос SO (не могу найти его сейчас) и решения что, поскольку информация не включена в выход available.packages(), а также в результате применения readRDS - @CRAN/web/packages/packages.rds (трюк от Jeroen Ooms), я не мог придумать способ, который можно было бы сделать без царапин ...

H ERE в мой скребок, применяется к первым 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-таблицу , со связями, что весь мир мог бы использовать (а затем добавить Виагры объявления на странице, а $$ ПРИБЫЛЬ $$ ...)

редактировать: обернуты как скачать и readRDS в функции, так Я могу обернуть все это в try

+0

Я думаю, что я собираюсь очистить эту или модифицированную версию и включить вывод в виде набора данных в пакете. Спасибо, хотя я, вероятно, откажусь от рекламы Viagra. –

+0

Я попробовал функцию выше и столкнулся с проблемой. Я исключил ', sep =" "', поскольку вы используете 'paste0'. Но когда я пытаюсь запустить v v часть.Он останавливается на 20% и дает мне следующую ошибку: 'Ошибка в readRDS (tmp.rds): ошибка чтения из соединения. Любые идеи о том, как преодолеть это? Что я делаю не так? –

+1

Не знаю. Может быть, где-то есть поврежденный файл index.rds? Вы можете добавить еще один оператор 'try' вокруг' readRDS', чтобы пропустить его ... потому что функция использует 'ldply', у него нет доступа к имени текущего обрабатываемого пакета; это может стоить сосать его и использовать цикл 'for' для большей прозрачности ... –

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 
+1

Спасибо Andrie, я действительно получил полный список виньет, который может предложить CRAN, а не только локально установленные пакеты. Я думаю, что это может быть немного сложнее, чем я надеялся. –

Смежные вопросы