我目前正在尝试创建一个程序包,并且一直遵循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函数。
但是我遇到两个问题:
如果我不@import roxygen,则必须在list(...)的每个元素前添加ggplot2 :::前缀。我已经尝试使用lapply和paste0这样做,但是它仅适用于字符串,当我尝试在lapply内部调用xlab()和ylab()时。
如果我@导入所有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 :: ??