建议包开发人员检查用户是否安装了包的典型方法如下:
if (!requireNamespace("package")) {
stop("Please install package.")
}
Run Code Online (Sandbox Code Playgroud)
requireNamespace加载包(在当前范围内?)并返回 TRUE/FALSE 值。我需要在不加载命名空间的情况下检查包的安装状态。
这样做的原因是因为我正在编写一个knit_printS3 方法(扩展knitr包),并且我正在检查的命名空间在我的方法上下文之外有我想要避免的kableExtra副作用。knit_print
加载后,kableExtra会更改后续调用knitr::kable在全局级别的格式化方式。这样做有充分的理由,但我想在我的 S3 方法内部使用kableExtra,并且不要让最终用户对调用kable我的方法后行为不同的原因感到困惑。knit_print
这就是为什么我想在不加载命名空间的情况下检查命名空间(如果kableExtra未安装,只需调用knitr::normal_print)。
编辑:为了澄清为什么我不认为这是这个问题的重复,这些答案没有特别注意解决方案在安装时是否加载包。事实证明,有些解决方案没有加载有问题的包,但它们没有明显区分。
使用installed.packages。
if ("kableExtra" %in% rownames(installed.packages()) {
# do something
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1177 次 |
| 最近记录: |