R - 当导入的包版本太旧时,如何强制安装我的自定义包失败?

R - How Do I Force Installation of My Custom Package to Fail When Imported Package Version is Too Old?

我一直在研究自定义 R 库。我使用来自几个不同包的函数(总是用 :: 限定),所以我将它们添加到我的 DESCRIPTION 文件的 Imports 部分。当我使用 R CMD INSTALL 安装我的包时,如果导入包的版本太旧,我会收到警告,但安装会继续。我如何强制它失败并提醒用户他们需要更新该软件包?我不想将它们中的任何一个添加到 Depends 部分,因为我不想在我的库加载时加载这些额外的包。

示例描述文件:

Depends: R (>= 3.1.2) Imports: dplyr (>= 0.7.0)

如果用户系统上加载了 dplyr 0.5.0,安装会继续,但某些依赖于 dplyr 0.7.0 的功能在调用时会失败。

这是使用 find.packagepackageDescriptionpackageVersion 的可能解决方案:

.onLoad <- function(libname, pkgname) {
  myImports <- strsplit(utils::packageDescription(pkgname)[["Imports"]], split = ",\s")[[1]]
  if (length(find.package("dplyr", quiet = TRUE)) > 0) {
    reqVers <- grep("^dplyr [(]", myImports, value = TRUE)
    reqVers <- sub("^dplyr [(]>= ([0-9]+.*[0-9]+).*", "\1", reqVers)
    if (check <- utils::packageVersion("dplyr") < reqVers)
      stop("Dplyr is version ", utils::packageVersion("dplyr"), " --- this package requires version ", reqVers, " at least")
  }
  invisible()
}

正如您在评论中所说,通常的做法是将其放入名为 zzz.R.

的文件中

当然您也可以将 stop 替换为 warning