【问题标题】:check if package name belongs to a CRAN archived package检查包名是否属于 CRAN 归档包
【发布时间】:2015-11-08 01:00:15
【问题描述】:

如何从 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 检查中引发警告。

【问题讨论】:

  • 我假设有一个内置的基本方式:为什么?
  • @DirkEddelbuettel 如果您使用 helpr 作为包名并运行 r cmd check -as.cran,则会引发警告。检查必须使用某些东西,或者我假设因为我不知道 r cmd 在做什么。
  • 所有代码都在tools 包中(或者可能是utils,我总是把它弄混),你看了吗?
  • @DirkEddelbuettel 谢谢 是的,我也这么认为(至少在 utils 上),因此查看了 utils,但没有看到我所相信的给出了那个。也许我需要更多地了解 R CDM check` 的工作原理。我去看看tools里面可能有什么东西。

标签: r cran


【解决方案1】:

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

编辑 (由 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){
    tolower(package) %in% tolower(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

【讨论】:

  • 我根据您的回复添加了代码。如果它不适合随时回滚。
  • 这似乎没有为包 mm 返回正确的结果。 check_archived("mm") 返回 FALSE,但 R CMD check --as-cran 给出两条消息:Conflicting package names (submitted: mm, existing: MM [https://CRAN.R-project.org])Conflicting package names (submitted: mm, existing: MM [CRAN archive])
  • 哦...区分大小写 check_archived("MM") 返回 TRUE
  • @Joshua 我做了一个反映 CRAN 政策的编辑(这种情况无关紧要,例如,如果 MM 存在,那么 mm 是不允许的)
  • @stevec 谢谢!我知道该政策,但没有在答案中说明。感谢您修复!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    github.com/ropenscilabs/available

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

    • 有效性检查
    • GitHub、CRAN 和 Bioconductor 上尚不提供检查
    • 在城市词典、维基词典和维基百科中搜索意外含义
    • 可以根据包标题或描述中的文字建议可能的名称。

    【讨论】:

      猜你喜欢
      • 2021-08-14
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      相关资源
      最近更新 更多