如果没有安装软件包,是否有一种快速方法可以找出给定任务视图中哪些软件包具有与之关联的晕影或演示?我已经想出如何从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))
我希望避免刮擦,因为我没有经验,但也许这是唯一的方法。有什么想法吗?
答案 0 :(得分:3)
您无需刮擦,只需测试CRAN网络上是否存在vignettes
文件夹。为提高效率,请使用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
判断包是否有演示的唯一方法是下载源存档文件并查看它是否有一个demo子目录 - CRAN站点没有提取的源代码,并且它没有存储在任何地方的元数据中。可行,但凌乱,缓慢,需要下载所有CRAN来测试所有包。