检查包名是否属于CRAN归档包

时间:2015-11-08 01:00:16

标签: r cran

如何从CRAN归档包的一个检查。可以检查包是否是CRAN包,如下所示:

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

但像 helpr 这样的软件包使用相同的代码显示为false。如何检查名称是否已存档?

"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检查中发出警告。

3 个答案:

答案 0 :(得分:3)

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

编辑 (作者:Tyler Rinker)使用Josh的回答,下面的代码告诉我,我的目标虽然不如@ hrbrmstr&# 39,S:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我认为ROpenSciLabs最新发布的软件包available是为此设计的(以及更多):

github.com/ropenscilabs/available

它的自述文件(截至目前)列出:

  • 检查有效性
  • GitHub,CRAN和Bioconductor上尚未提供支票
  • 搜索Urban Dictionary,Wiktionary和Wikipedia以获取意想不到的含义
  • 可以根据包标题或说明中的文字建议可能的名称。