将Reduce()与导入包中的函数列表一起使用

时间:2019-02-21 02:17:05

标签: r namespaces

我目前正在尝试创建一个程序包,并且一直遵循Hadley Wickham的建议,方法是调用名称空间而不是Roxygen中的@import程序包名称。

我有这个功能:

make_plot <- function(data, x, y, groups = NULL, error.params = list(),
                      graph.params = list(), ...) {

  ggplot(data, aes(x, y, colour = groups)) +
    build_bar_graph(error.params, graph.params) +
    build_graph_options(...)

}

可以打电话

build_graph_options <- function(...) {
  Reduce("+", list(...), accumulate = TRUE)
}

其中...应该是xlab(),ylab()和其他ggplot2函数。

但是我遇到两个问题:

  1. 如果我不@import roxygen,则必须在list(...)的每个元素前添加ggplot2 :::前缀。我已经尝试使用lapply和paste0这样做,但是它仅适用于字符串,当我尝试在lapply内部调用xlab()和ylab()时。

  2. 如果我@导入所有ggplot2,则可以使用不带ggplot2 :::的ggplot()(请参阅第一个函数),但是Reduce()会返回Error in ylab("Mean growth") : could not find function "ylab"。但是,如果我在参数中添加ggplot2 ::,效果很好。

我这样打电话给make_plot:

make_plot(test.summary, dose, statistic, groups = supp,
          error.params = list(width = .5),
          graph.params = list(colour = "black"),
          xlab("Dose (mg)"), ylab("Mean growth"))

除非将xlab()替换为ggplot2 :: xlab()等,否则它不起作用。

有没有一种方法可以避免在没有用户输入的情况下强制使用ggplot2 ::或在函数前面加上ggplot2 :: ??

0 个答案:

没有答案