R:Как определить, с какими пакетами в представлении задачи связаны виньетки или демо-версии
Вопрос
Есть ли быстрый способ узнать, без установки пакетов, с какими пакетами в данном представлении задачи связаны виньетки или демо-версии?Я выяснил, как определить, какие пакеты находятся в заданном представлении задачи из 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]
Вот что я пробовал, но попытки оказались неудачными, поскольку они рассматривают только те пакеты, которые у меня уже есть:
vignette(package= c(pckgs))
browseVignettes(package= c(pckgs))
demo(package=c(pckgs))
Я надеюсь избежать выскабливания, так как у меня нет опыта в этом, но, возможно, это единственный способ.Есть какие-нибудь мысли?
Решение
Вам не нужно царапать, просто проверьте наличие vignettes
папка на веб-сайте CRAN.Для повышения эффективности используйте httr
и HEAD
:
hasvig <- function(packagename){
require(httr)
url = paste0(getOption("repos"),"/web/packages/",packagename,"/vignettes")
c = HEAD(url)
return(c$status_code==200)
}
Доказательство методом индукции:
> hasvig("sp")
[1] TRUE
> hasvig("abd")
[1] FALSE
это работает для них, поэтому это работает для всего.
Векторизируйте его, если хотите:
> hasvigs = Vectorize(hasvig)
> hasvigs(c("sp","abd","Rcpp"))
sp abd Rcpp
TRUE FALSE TRUE
Единственный способ определить, есть ли в пакете демонстрационный файл, - это загрузить исходный архивный файл и посмотреть, есть ли в нем демонстрационный поддиректор - на сайтах CRAN нет извлеченного исходного кода, и он нигде не хранится в метаданных.Выполнимо, но грязно, медленно, требует загрузки всего CRAN для тестирования всех пакетов.