ggpubr 找不到 'mean_se' 除非 ggpubr 是通过 library() 附加的

ggpubr can't find 'mean_se' unless ggpubr is attached via library()

问题总结: 当我尝试通过“添加”参数向 ggpubr 图添加汇总统计时,ggpubr 找不到汇总统计函数(下面的示例代码)。例如,如果我尝试使用 add="mean_se" 添加错误栏,我会收到一条错误消息,但没有错误栏。

不满意解决方案:通过调用library(ggpubr)附加ggpubr 解决这个问题问题。参见 this answer

为什么上面的解决方案不能令人满意:我正在开发一个包,所以想避免通过调用 library() 附加其他包 - 我的理解是这是最佳实践,以避免用户可能没有预料到会加载的东西污染命名空间。

我的问题: 有什么方法可以让 ggpubr 在不附加包的情况下找到 mean_se

示例代码(在我的包中的 .R 文件中):

make.plot = function(){
  utils::data("iris")
  ggpubr::ggbarplot(
    data = iris,
    x = "Species",
    y = "Sepal.Length",
    add = "mean_se")
}

示例输出:

> devtools::load_all(".")
# i Loading MyPackage
> make.plot()
# Warning message:
# Computation failed in `stat_summary()`:
# object 'mean_se_' of mode 'function' was not found 

有一件事应该起作用,但没有起作用,就是将“ggpubr::mean_se_”作为add参数传递。这避免了错误消息,但会产生不正确的图。该图应如下所示:

但是传递“ggpubr::mean_se_”反而产生:

额外的怪异:如果我曾经添加一个调用来加载ggpubr,使用devtools::load_all(".")构建MyPackage,并且运行 它,然后上面的代码 never 失败,直到我退出并重新加载 RStudio,即使我从我的包中删除调用 library(ggpubr) 并重新构建它。

如果您查看 add 参数在 ggpubr 中的处理方式,它实际上作为字符串匹配到其中一个汇总函数。调用 ggbarplot 时,摘要函数似乎需要在搜索路径上。

最简单的方法是将函数复制到您自己的包命名空间中:

mean_se_ <- ggpubr::mean_se_

make.plot = function(){
  utils::data("iris")
  ggpubr::ggbarplot(
    data = iris,
    x = "Species",
    y = "Sepal.Length",
    add = "mean_se_")
}

make.plot()

reprex package (v2.0.1)

于 2022-05-04 创建

由于您正在创建包,因此您可以通过将 mean_se_ 导入到您的函数中来确保它在搜索路径中。

如果你使用 roxygen 你可以添加标签 @importFrom ggpubr mean_se_:

#' @importFrom ggpubr mean_se_
make.plot = function(){
  utils::data("iris")
  ggpubr::ggbarplot(
    data = iris,
    x = "Species",
    y = "Sepal.Length",
    add = "mean_se")
}

然后你 运行 devtools::document() 和 运行 你的函数,你的输出应该是这样的: