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
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
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 ... –
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. –