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

时间:2018-02-02 20:40:24

标签: r analytics

我在工作中一直在研究自定义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的函数在调用时将失败。

1 个答案:

答案 0 :(得分:1)

以下是使用php artisan servefind.packagepackageDescription的可能解决方案:

packageVersion

正如您在评论中所说,通常的做法是将其放入名为.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