简体   繁体   English

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

[英]check if package name belongs to a CRAN archived package

How can one check of a package has been archived from CRAN. 如何从CRAN归档包的一个检查。 One can check if a package is a CRAN package like so: 可以检查包是否是CRAN包,如下所示:

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

But a package like helpr shows false with the same code. 但像帮助程序这样的软件包使用相同的代码显示为false。 How could I check if a name is archived? 如何检查名称是否已存档?

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

I could scrape the archive like this: 我可以像这样刮掉档案:

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

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

but I assume there is a built in base way to to do this as using an archived package name will throw a warning in a CRAN check. 但我假设有一种内置的基本方法来执行此操作,因为使用存档的包名称将在CRAN检查中发出警告。

R CMD check basically calls tools:::.check_packages . R CMD check基本上调用tools:::.check_packages The functionality you're looking for is in tools:::.check_package_CRAN_incoming , and tools:::CRAN_archive_db . 您正在寻找的功能是tools:::.check_package_CRAN_incomingtools:::CRAN_archive_db

Edit (by Tyler Rinker) Using Josh's answer the following code gives me what I'm after though less well succint than @hrbrmstr's: 编辑 (由Tyler Rinker提供)使用Josh的答案,下面的代码告诉我我所追求的虽然不如@ 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

FWIW, rolling your own CRAN_archive_db would be something like: FWIW,滚动你自己的CRAN_archive_db将是这样的:

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

I think the somewhat-recently-released package available by the ROpenSciLabs is designed for this (and much more): 我觉得有点-最近发布的包available通过ROpenSciLabs是专为这个(以及更多):

github.com/ropenscilabs/available github.com/ropenscilabs/available

Its readme (as of now) lists: 它的自述文件(截至目前)列出:

  • Checks for validity 检查有效性
  • Checks not already available on GitHub, CRAN and Bioconductor GitHub,CRAN和Bioconductor上尚未提供支票
  • Searches Urban Dictionary, Wiktionary and Wikipedia for unintended meanings 搜索Urban Dictionary,Wiktionary和Wikipedia以获得意想不到的含义
  • Can suggest possible names based on text in the package title or description. 可以根据包标题或描述中的文本建议可能的名称。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM