【问题标题】:Check if package is installed without loading [duplicate]检查是否在未加载的情况下安装了软件包[重复]
【发布时间】:2019-02-22 22:22:14
【问题描述】:

建议包开发者检查用户是否安装包的典​​型方式如下:

if (!requireNamespace("package")) {
  stop("Please install package.")
}

requireNamespace 加载包(在当前范围内?)并返回 TRUE/FALSE 值。我需要在不加载命名空间的情况下检查包的安装状态。

这样做的原因是因为我正在编写一个knit_print S3 方法(扩展knitr 包)并且我正在检查kableExtra 的命名空间在我的knit_print 方法的上下文之外有副作用我想避免。

加载时,kableExtra 会更改后续调用 knitr::kable 在全局级别的格式。这样做有充分的理由,但我想在我的 S3 方法中使用kableExtra,并且不会让最终用户对为什么在调用我的knit_print 方法后kable 的行为有所不同感到困惑。

这就是为什么我想在不加载命名空间的情况下检查命名空间(如果没有安装kableExtra,只需调用knitr::normal_print)。

编辑:为了澄清为什么我不认为这是 this question 的重复,这些答案并没有特别注意解决方案是否加载安装时打包。事实证明,有些解决方案没有加载有问题的包,但它们并没有明显的区别。

【问题讨论】:

标签: r r-package


【解决方案1】:

使用installed.packages

if ("kableExtra" %in% rownames(installed.packages()) {
    # do something
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2013-02-15
    相关资源
    最近更新 更多