R:Cómo saber qué paquetes en una Vista de tareas tienen viñetas o demostraciones asociadas
Pregunta
Sin instalar los paquetes, ¿existe una forma rápida de averiguar qué paquetes en una vista de tareas determinada tienen viñetas o demostraciones asociadas?Descubrí cómo saber qué paquetes están en una vista de tareas determinada desde R:
library(ctv)
# get all the available task views
taskviews<-available.views()
# get task view of interest (e.g. "TimeSeries")
tv_of_interest<-taskviews[[which(sapply(taskviews,'[',1)=="TimeSeries")]]
# get all the packages in the task view
pckgs <- tv_of_interest[['packagelist']][1]
Esto es lo que he intentado, pero los intentos no son correctos, ya que solo consideran paquetes que ya tengo:
vignette(package= c(pckgs))
browseVignettes(package= c(pckgs))
demo(package=c(pckgs))
Espero evitar el scraping, ya que no tengo experiencia con ello, pero quizás sea la única forma.¿Alguna idea?
Solución
No es necesario raspar, solo probar la existencia de un vignettes
carpeta en la web de CRAN.Para mayor eficiencia, utilice httr
y HEAD
:
hasvig <- function(packagename){
require(httr)
url = paste0(getOption("repos"),"/web/packages/",packagename,"/vignettes")
c = HEAD(url)
return(c$status_code==200)
}
Prueba por inducción:
> hasvig("sp")
[1] TRUE
> hasvig("abd")
[1] FALSE
funciona para ellos, por lo que funciona para todo.
Vectorízalo si quieres:
> hasvigs = Vectorize(hasvig)
> hasvigs(c("sp","abd","Rcpp"))
sp abd Rcpp
TRUE FALSE TRUE
La única forma de saber si un paquete tiene una demostración es descargar el archivo fuente y ver si tiene un subdirectorio de demostración: los sitios CRAN no tienen código fuente extraído y no están almacenados en metadatos en ninguna parte.Es factible, pero complicado y lento, requiere descargar todo CRAN para probar todos los paquetes.