2015-11-08 41 views
4

如何检查包是否已从CRAN存档。一个可以检查,如果一个包是CRAN包像这样:检查包名是否属于CRAN存档包

"ggplot2" %in% available.packages()[,1] 
## [1] TRUE 

但包像helpr显示了相同的代码错误。我如何检查名称是否存档?

"helpr" %in% available.packages()[,1] 
## [1] FALSE 

我可以凑这样的档案:

archs <- XML::readHTMLTable(readLines("https://cran.r-project.org/src/contrib/Archive/"), 
    stringsAsFactors = FALSE) 

gsub("/$", "", na.omit(archs[[1]][, "Name"])) 

但我相信有一个内置的基地的方式来做到这一点是使用归档包名称将扔在一个CRAN检查警告。

+0

_I假设有一个内置的基本方式:为什么? –

+0

@DirkEddelbuettel如果您使用helpr作为软件包名称并运行r cmd check -as.cran,则会引发警告。检查必须使用某些东西,或者我正在假设,因为我不知道r cmd正在做什么。 –

+0

所有代码都在'tools'包中(或者'utils',我总是把它们混合起来),你看起来怎么样? –

回答

3

R CMD check基本上调用tools:::.check_packages。您正在寻找的功能是tools:::.check_package_CRAN_incomingtools:::CRAN_archive_db

编辑(由泰勒林克)使用Josh的答案下面的代码给了我什么,我以后虽然不那么succint我比@ hrbrmstr的:

get_archived <- function(cran = getOption("repos")){ 
    if (is.null(cran)) cran <- "http://cran.rstudio.com/" 
    con <- gzcon(url(sprintf("%s/%s", cran, "src/contrib/Meta/archive.rds"), open = "rb")) 
    on.exit(close(con)) 
    x <- readRDS(con) 
    names(x) 
} 


check_archived <- function(package){ 
    package %in% get_archived() 
} 

check_archived("ggplot2") 
check_archived("helpr") 
check_archived("foo") 

## > check_archived("ggplot2") 
## [1] TRUE 
## > check_archived("helpr") 
## [1] TRUE 
## > check_archived("foo") 
## [1] FALSE 
+0

我根据您的回复添加了代码。如果不合适,请随时回滚。 –

2

FWIW,滚动您自己CRAN_archive_db会是这样的:

download.file("https://cran.rstudio.com/src/contrib/Meta/archive.rds", 
       "archive.rds") 
archive <- readRDS("archive.rds") 
0

我觉得有点-最近发布的包availableROpenSciLabs是德西限制标准用这个(以及更多):

github.com/ropenscilabs/available

其自述(截至目前)名单:

  • 检查的有效性
  • 没有检查GitHub上,CRAN和Bioconductor的
  • 已经可用
  • 搜索城市字典,维基百科和维基百科的意想不到的含义
  • 可以根据包标题中的文字或de scription。