2012-05-31 13 views
5

Existe la función available.packages() para enumerar todos los paquetes disponibles en CRAN. ¿Hay una función similar para encontrar todas las viñetas disponibles? Si no, ¿cómo obtendría una lista de todas las viñetas y los paquetes con los que están asociados?CRAN viñetas disponibles

Como una caja de esquina para tener en cuenta, el paquete data.table tiene 3 viñetas asociadas.

EDIT: por la respuesta de Andrie me doy cuenta de que no estaba claro. Sé acerca de la función de viñeta para encontrar todas las viñetas locales disponibles, estoy buscando una manera de obtener todas las viñetas de todos los paquetes en CRAN.

+1

Puede analizar (por ejemplo, con 'XML' y' RCurl') todos los índices de paquetes en CRAN, aunque estoy bastante seguro de que los administradores de sistemas no amarían esta idea allí. – daroczig

+0

Me parece recordar mirar esto en respuesta a alguna pregunta SO (no puedo encontrarla ahora) y decidir que dado que la información no está incluida en el resultado de 'available.packages()', ni en el resultado de aplicar 'readRDS' a' @ CRAN/web/packages/packages.rds' (un truco de Jeroen Ooms), no podía pensar en una forma no raspante de hacerlo ... –

+0

Esto sería parte de un paquete que está pensado para CRAN, por lo que un método de raspado no es el mejor enfoque a menos que ... Podría raspar una vez y almacenar la información como un conjunto de datos en el paquete que se actualiza con cada nueva versión del paquete. Una posibilidad tal vez. –

Respuesta

5

Me parece recordar mirar esto en respuesta a alguna cuestión de forma (no se puede encontrar ahora) y decidir que dado que la información no está incluida en la salida available.packages(), ni en el resultado de aplicar readRDS a @CRAN/web/packages/packages.rds (un truco de Jeroen Ooms), no pude pensar en una forma no raspante de hacerlo ...

H de antes que mi raspador, aplicado a los primeros 100 paquetes (que conduce a 44 viñetas)

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")]) 

Existen muchas maneras de limpiar esta arriba/que sea más compacto, pero parece que funciona bien. Tu raspado/actualizar ocasionalmente la estrategia parece razonable. O si lo desea, podría raspar diariamente (o semanalmente o lo que parezca razonable) y guardar/publicar los resultados en algún lugar públicamente accesible, luego incluir una función con esa URL codificada en el paquete ... o incluso crear una tabla HTML con buen formato , con enlaces, que todo el mundo podría usar (y luego agregar anuncios de Viagra a la página, y $$ PROFIT $$ ...)

editar: envolvió tanto la descarga como el readRDS en una función, por lo que Puedo envolver todo en try

+0

Creo que voy a raspar con esta o una versión modificada e incluir el resultado como un conjunto de datos en el paquete. Gracias, aunque probablemente renuncie a la publicidad de Viagra. –

+0

Intenté la función anterior y me encontré con un problema. Eliminé ', sep =" "' cuando estás usando 'paste0'. Pero cuando intento ejecutar la porción v v.Se detiene al 20% y me da el siguiente error: 'Error en el readRDS (tmp.rds): error al leer la conexión' ¿Alguna idea sobre cómo superar esto? ¿Qué estoy haciendo mal? –

+1

No lo sé. ¿Tal vez hay un archivo index.rds corrupto en alguna parte? Podría poner otra instrucción 'try' alrededor del' readRDS' para omitirlo ... porque la función usa 'ldply', no tiene acceso al nombre del paquete actual que se está procesando; podría valer la pena aspirarlo y usar un bucle 'for' para una mayor transparencia ... –

2

Las funciones vignette() y browseVignettes() enumeran todas las viñetas de los paquetes instalados en su máquina.

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() es especialmente útil, ya que crea una página web con hipervínculos:

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

Gracias Andrie, en realidad estoy detrás de una lista completa de viñetas que CRAN tiene para ofrecer, no solo los paquetes instalados localmente. Creo que esto puede ser un poco más difícil de lo que esperaba. –

Cuestiones relacionadas