2

在不安装包的情况下,是否有一种快速的方法来找出给定任务视图中的哪些包具有与之关联的小插图或演示?我已经想出了如何从 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))

我希望避免刮擦,因为我没有经验,但也许这是唯一的方法。有什么想法吗?

4

1 回答 1

3

你不需要刮,只需要测试vignettesCRAN网络上是否存在文件夹即可。为了效率,使用httrHEAD

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 来测试所有包。

于 2014-02-25T10:01:37.727 回答