簡體   English   中英

檢查包名是否屬於CRAN歸檔包

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

如何從CRAN歸檔包的一個檢查。 可以檢查包是否是CRAN包,如下所示:

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

但像幫助程序這樣的軟件包使用相同的代碼顯示為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檢查中發出警告。

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){
    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,滾動你自己的CRAN_archive_db將是這樣的:

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

我覺得有點-最近發布的包available通過ROpenSciLabs是專為這個(以及更多):

github.com/ropenscilabs/available

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

  • 檢查有效性
  • GitHub,CRAN和Bioconductor上尚未提供支票
  • 搜索Urban Dictionary,Wiktionary和Wikipedia以獲得意想不到的含義
  • 可以根據包標題或描述中的文本建議可能的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM