我试图在包中包含以下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的命名空间中找到此函数但在命令行本身没有?
答案 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.wrap
,plot_label_wrap
,plot_label.wrap
等等。你不要这样做。 有,但在少数情况下,使用句号会导致意外行为。