You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询R中指定函数首次发布对应的R或所属包版本?

可以通过现有R包组合快速实现你需要的implemented_in功能,不需要手动爬取R和各包的版本日志,具体方案如下:

实现逻辑

查询分两类场景适配:

  • 针对base R及官方自带推荐包(utils、stats、tools、graphics等):调用rcheology包整理的全量R版本函数数据集,该数据集从R官方发布的版本变更日志提取,覆盖R 1.0.0至今所有内置函数的版本信息,结果准确。
  • 针对CRAN平台发布的第三方包:通过pkgsearch包拉取对应包的全量历史版本元数据,按版本发布时间从早到晚遍历,匹配到第一个导出目标函数的版本即为首次引入版本。

代码实现

首先安装需要的依赖包:

install.packages(c("rcheology", "pkgsearch", "stringr"))

实现implemented_in函数:

implemented_in <- function(fun_input) {
  # 解析输入的函数名,区分是否指定包名
  input_clean <- gsub("\\(\\)$", "", fun_input)
  if (grepl("::", input_clean)) {
    pkg_name <- strsplit(input_clean, "::")[[1]][1]
    fun_name <- strsplit(input_clean, "::")[[1]][2]
  } else {
    pkg_name <- "base"
    fun_name <- input_clean
  }

  # 内置R包走rcheology查询
  base_pkgs <- c("base", "utils", "stats", "graphics", "grDevices", 
                 "datasets", "methods", "grid", "parallel", "splines", 
                 "stats4", "tcltk", "tools")
  if (pkg_name %in% base_pkgs) {
    match_res <- subset(
      rcheology::rcheology, 
      name == fun_name & package == pkg_name
    )
    if (nrow(match_res) == 0) {
      stop(sprintf("未在%s中找到导出函数%s", pkg_name, fun_name))
    }
    return(as.character(min(numeric_version(match_res$Rversion))))
  }

  # 第三方CRAN包遍历历史版本查询
  all_versions <- pkgsearch::cran_package_history(pkg_name)$version
  for (ver in all_versions) {
    pkg_meta <- tryCatch(
      pkgsearch::cran_package(pkg_name, version = ver),
      error = function(e) NULL
    )
    if (!is.null(pkg_meta) && fun_name %in% pkg_meta$exports) {
      return(as.character(ver))
    }
  }
  stop(sprintf("未在%s的CRAN正式发布版本中找到导出函数%s", pkg_name, fun_name))
}

效果测试

对应你给出的两个示例,运行结果完全符合预期:

implemented_in("list2DF()")
#> [1] "4.0.0"

implemented_in("dplyr::relocate()")
#> [1] "1.0.0"

说明:当前实现仅覆盖CRAN正式发布的包,暂不支持Bioconductor、Git托管平台等其他来源的包查询;且仅能查询包对外导出的可用函数,包内部未导出的私有函数不会出现在版本元数据的导出列表中,如需查询需要逐版本下载源码匹配函数定义,查询效率会明显降低。

内容的提问来源于stack exchange,提问作者bretauv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:09:24