【发布时间】:2015-05-18 16:57:01
【问题描述】:
首先,我已经阅读了很多关于这个主题的文章。我研究了here、here、here 和here 的对话。然而,问题是,我仍然认为一个特定的主题没有得到充分讨论。我正在开发一个包,我希望使用ggplot2 包中的autoplot() 泛型创建我自己的方法,即具有autoplot.MyFunction() 之类的功能。
我当前的DESCRIPTION 文件包含Depends: ggplot2 并且一切正常,没问题。我还在我的函数的帮助文件代码中将它与 Roxygen2 标签 @import ggplot2 结合起来,再加上 @export。
但是,大多数文档都描述了应该如何尝试使用Imports: ggplot2。问题是,如果我进行此更改,当我使用library(my_package) 加载我的包并尝试使用autoplot.MyFunction() 时,我会遇到以下错误:
> autoplot(tmp)
Error: could not find function "autoplot"
同样,如果我直接调用函数...
> autoplot.MyFunction(tmp)
Error: could not find function "autoplot.MyFunction"
但是,如果我使用 :: 方法,那么它确实有效...
> ggplot2::autoplot(tmp)
据我了解,这是因为Imports 加载 ggplot2 包(以及它的功能),但没有附加它,而@987654341 @ 确实附加它。
所以,最后,我的问题很简单,我是否正确地认为要使用包泛型,我应该使用 Depends: package,即在我的情况下是 Depends: ggplot2。
然后,为了在我的包函数中使用包中的函数,我应该使用Imports: package 加上::,例如:
silly_fn <- function (data) {
p <- ggplot(tmp, aes(x, y)) +
geom_line() +
geom_segment(aes(x = 0, xend = 20, y = 0, yend = 20),
arrow = grid::arrow(length = grid::unit(0.15, "inches")))
p
}
需要Imports: grid 和Roxygen2 标签@import grid。
我认为这一切都正确?
【问题讨论】:
标签: r