我在工作中一直在研究自定义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的函数在调用时将失败。
答案 0 :(得分:1)
以下是使用php artisan serve
,find.package
和packageDescription
的可能解决方案:
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
。