r - 在包中包含 ggplot2 函数

标签 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 的命名空间中找到,而不是在命令行本身中找到?

最佳答案

评论中的解决方案是更具体地说明如下导出

#' 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")
}

roxygen 试图在 @usage 之类的事情上变得聪明, @details , 和 @exports使事情更简单,但有时,就像在这个例子中一样,它并不总是有效。
plot是 S3 通用方法,可以定义为 plot.someclass这将为某些对象创建绘图方法 xclass “someclass”,可以简单地通过 plot(x) 调用.

roxygen 认为 someclass您的包裹是“label.wrap”并导出 plot.label.wrap作为 S3 方法而不是普通函数,期望您将其用作 plot(x)哪里class(x)是“label.wrap”而不是试图使用 plot.label.wrap直接尝试(并发现它不起作用)。

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

关于r - 在包中包含 ggplot2 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29968335/

相关文章:

重新安装 R 包后刷新 sysdata.rda

python - 如何使用 mplfinance 在绘图中的其他线条上方显示蜡烛?

Python - 根据这些值拟合 GEV 分布

r - 视线中的垂直线

r - 像 javascript 一样定义逗号运算符

r - 从数字字符串中检测范围

r - dplyr 中的 substr %>% 变异

python - 在更短的时间内完成许多情节 - python

r - x 轴上的 geom_vline 垂直线与分类数据 : ggplot2

r - 在单页上放置多个 ggplot 图时日期标签重叠