在包中包含ggplot2函数

时间:2015-04-30 12:54:57

标签: r plot ggplot2 namespaces r-package

我试图在包中包含以下ggplot2辅助函数[它包装grid_facet中的标签(.~variable,labeller =“plot.label.wrap”)]:

#' Label wrapper for ggplot
#'
#' Include in the facet_grid option of ggplot.
#' @param variable
#' @param value
#' @return wrapper
#' @export

plot.label.wrap <- function(variable, value) {

  lapply(strwrap(as.character(value), width=15, simplify=FALSE),
         paste, collapse="\n")
}

我的描述文件包括:导入:ggplot2。使用该函数的脚本包括:library(ggplot2)。

包构建,重新加载并提供文档?plot.label.wrap。它可以找到:

> getAnywhere(plot.label.wrap)
A single object matching ‘plot.label.wrap’ was found
It was found in the following places
  registered S3 method for plot from namespace mypackage
  namespace:mypackage
with value

function(variable, value) {

  lapply(strwrap(as.character(value), width=15, simplify=FALSE),
         paste, collapse="\n")
}
<environment: namespace:mypackage>

然而:

> plot.label.wrap
Error: object 'plot.label.wrap' not found

所以我的问题是,为什么在mypackage的命名空间中找到此函数但在命令行本身没有?

1 个答案:

答案 0 :(得分:3)

评论中的解决方案是更具体的出口如下

__attribute__

roxygen试图对#' Label wrapper for ggplot #' #' Include in the facet_grid option of ggplot. #' @param variable #' @param value #' @return wrapper #' @export plot.label.wrap plot.label.wrap <- function(variable, value) { lapply(strwrap(as.character(value), width=15, simplify=FALSE), paste, collapse="\n") } @usage@details之类的东西保持聪明,以使事情更简单,但有时候,就像在这个例子中一样,它并不总是如此锻炼。

@exports是一种S3泛型方法,可以定义为plot,它将为plot.someclass&#34;某些类&#34创建一些对象x的绘图方法;并且可以通过class简单地调用。

roxygen认为您的包裹plot(x)是&#34; label.wrap&#34;并且导出someclass作为S3方法而不是正常函数,期望您将其用作plot.label.wrap,其中plot(x)是&#34; label.wrap&#34;而不是试图直接使用class(x)(并发现它不起作用)。

或者,就像提到的@shadow一样,你可以通过不在函数名中使用句点来避免这种混淆,例如plot.label.wrapplot_label_wrapplot_label.wrap等等。你不要这样做。 ,但在少数情况下,使用句号会导致意外行为。