在 CRAN 上查找 R 包的版本

问题描述 投票:0回答:1

在文档中我希望能够引用CRAN上安装的软件包的版本,该版本可能落后于我当前安装的版本。

我可以使用

available.packages()
来做到这一点,但这会下载整个CRAN包列表(350K行,10Mb),所以我想知道是否有更简单的东西。

#' Find version of a package on CRAN
cran_version <- function(package) {
  avail <- utils::available.packages(filters = "CRAN")
  avail <- avail[, c("Package", "Version")]
  which <- avail[, "Package"] == package
  avail[which, "Version"]
}
> packageVersion("heplots")
[1] ‘1.6.3’
> cran_version("heplots")
[1] "1.6.2"
r package version cran
1个回答
0
投票

这个怎么样?

PACKAGES <- tempfile(fileext = "rds")

pkgversion <- function(package) {
  # Get list of packages from CRAN if
  #
  # - don't have local copy or
  # - local copy more than 5 minutes old.
  #
  if (
    !file.exists(PACKAGES) || 
    difftime(Sys.time(), file.mtime(PACKAGES), unit = "mins") > 5
  ) {
    download.file(
      "cran.r-project.org/src/contrib/PACKAGES.rds",
      PACKAGES,
      quiet = FALSE
    )
  }
  # Read and convert to data frame.
  packages <- readRDS("PACKAGES.rds") |> data.frame()
  # Filter for specified package and return version.
  packages[packages$Package == package,]$Version
}

您可以使该功能更加健壮和高效,但这已经完成了工作。

输出示例:

> pkgversion("dplyr")
trying URL 'cran.r-project.org/src/contrib/PACKAGES.rds'
Content type 'unknown' length 953040 bytes (930 KB)
==================================================
downloaded 930 KB

[1] "1.1.4"
> pkgversion("ggplot2")
[1] "3.5.1"
> pkgversion("tidyr")
[1] "1.3.1"
© www.soinside.com 2019 - 2024. All rights reserved.