检查包名称是否属于 CRAN 归档包
check if package name belongs to a CRAN archived package
如何从 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 检查中引发警告。
R CMD check
基本上调用 tools:::.check_packages
。您正在寻找的功能在 tools:::.check_package_CRAN_incoming
和 tools:::CRAN_archive_db
.
中
Edit (by 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
FWIW,滚动你自己的 CRAN_archive_db
会是这样的:
download.file("https://cran.rstudio.com/src/contrib/Meta/archive.rds",
"archive.rds")
archive <- readRDS("archive.rds")
我认为 ROpenSciLabs 的 somewhat-recently-released 包 available
是为此(以及更多)设计的:
github.com/ropenscilabs/available
其自述文件(截至目前)列出:
- 检查有效性
- 检查尚未在 GitHub、CRAN 和 Bioconductor
上可用
- 在城市词典、维基词典和维基百科中搜索意想不到的含义
- 可以根据包裹标题或描述中的文字建议可能的名称。
如何从 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 检查中引发警告。
R CMD check
基本上调用 tools:::.check_packages
。您正在寻找的功能在 tools:::.check_package_CRAN_incoming
和 tools:::CRAN_archive_db
.
Edit (by 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
FWIW,滚动你自己的 CRAN_archive_db
会是这样的:
download.file("https://cran.rstudio.com/src/contrib/Meta/archive.rds",
"archive.rds")
archive <- readRDS("archive.rds")
我认为 ROpenSciLabs 的 somewhat-recently-released 包 available
是为此(以及更多)设计的:
github.com/ropenscilabs/available
其自述文件(截至目前)列出:
- 检查有效性
- 检查尚未在 GitHub、CRAN 和 Bioconductor 上可用
- 在城市词典、维基词典和维基百科中搜索意想不到的含义
- 可以根据包裹标题或描述中的文字建议可能的名称。