确定 CRAN 上 R 包历史上的版本数
Determine number of versions in history of R package on CRAN
是否可以确定过去 CRAN 上的包的版本数?
这是一个简单的函数,它使用给定包的旧版本转到 CRAN 页面并计算它们。
num.versions = function(package) {
require(rvest)
require(stringr)
# Get text of web page with package version info
page = read_html(paste0("https://cran.r-project.org/src/contrib/Archive/", package, "/"))
doc = html_text(page)
# Return number of versions (add 1 for current version)
paste("Number of versions: ",
length(unlist(str_extract_all(doc, "tar\.gz"))) + 1)
}
num.versions("ggplot2")
[1] "Number of versions: 29"
num.versions("data.table")
[1] "Number of versions: 34"
num.versions("distcomp")
[1] "Number of versions: 4"
这是使用 XML 包的一个。这只计算存档版本(更准确地说,存档 tar.gz
文件的数量)。加 1 得到版本总数,包括当前。
nCRANArchived <- function(pkg) {
link <- paste0("http://cran.r-project.org/src/contrib/Archive/", pkg)
qry <- XML::getHTMLLinks(link, xpQuery = "//@href[contains(., 'tar.gz')]")
length(qry)
}
nCRANArchived("data.table")
# [1] 33
nCRANArchived("ggplot2")
# [1] 28
nCRANArchived("MASS")
# [1] 40
nCRANArchived("retrosheet") ## shameless plug
# [1] 2
是否可以确定过去 CRAN 上的包的版本数?
这是一个简单的函数,它使用给定包的旧版本转到 CRAN 页面并计算它们。
num.versions = function(package) {
require(rvest)
require(stringr)
# Get text of web page with package version info
page = read_html(paste0("https://cran.r-project.org/src/contrib/Archive/", package, "/"))
doc = html_text(page)
# Return number of versions (add 1 for current version)
paste("Number of versions: ",
length(unlist(str_extract_all(doc, "tar\.gz"))) + 1)
}
num.versions("ggplot2")
[1] "Number of versions: 29"
num.versions("data.table")
[1] "Number of versions: 34"
num.versions("distcomp")
[1] "Number of versions: 4"
这是使用 XML 包的一个。这只计算存档版本(更准确地说,存档 tar.gz
文件的数量)。加 1 得到版本总数,包括当前。
nCRANArchived <- function(pkg) {
link <- paste0("http://cran.r-project.org/src/contrib/Archive/", pkg)
qry <- XML::getHTMLLinks(link, xpQuery = "//@href[contains(., 'tar.gz')]")
length(qry)
}
nCRANArchived("data.table")
# [1] 33
nCRANArchived("ggplot2")
# [1] 28
nCRANArchived("MASS")
# [1] 40
nCRANArchived("retrosheet") ## shameless plug
# [1] 2