我正在制作一个包,我想在其中定义一个新的绘图方法。我正在使用roxygen源代码内留档。这个问题似乎非常类似于:如何正确记录来自不同包的泛型的S3方法,使用Roxygen?和Roxygen2-如何正确记录S3方法,但我仍然无法让它工作。
给我带来麻烦的相关部分是:
#' Generic plot method
#'
#' @param x \dots
#' @param ... \dots
#' @export
plot <- function(x, ...) UseMethod("plot")
#' Default plot method
#'
#' @param x \dots
#' @param ... \dots
#' @importFrom graphics plot
#' @method plot default
#' @S3method plot default
plot.default <- function(x, ...) graphics::plot(x, ...)
#' Plotting function for ABI object
#'
#' Description.
#'
#' @param x ABI object as generated by newABI.
#' @param base Character. Bases to look at.
#' @param ... Other options passed to plot().
#' @return Nothing. Side-effect: plots graphs.
#' @method plot ABI
#' @S3method plot ABI
plot.ABI <- function(x, base, ...) {
#Overly simplified
plot(1, 1, main = base)
}
当我运行它并调查方法(绘图)时,没有为ABI对象定义方法。通过ABI::访问函数:绘图(ABI是包的名称)确实有效。使用:: 不起作用。
在包构建检查期间,有一个警告:
* checking S3 generic/method consistency ... WARNING
plot:
function(x)
plot.ABI:
function(x, base, ...)
See section ‘Generic functions and methods’ of the ‘Writing R
Extensions’ manual.
似乎在参数中存在分歧。但是我不明白这一点,因为泛型有参数x和…我的ABI方法也是如此(除了base)。
所以有两个问题,我希望源于同一个问题:plot. ABI方法未导出,包检查抛出警告。
我该如何解决这个问题?
问题是您的方法需要具有与泛型相同的参数。让我们假设您使用的是R提供的泛型:
> args(plot)
function (x, y, ...)
NULL
现在plot()
实际上是一个特例,因为您基本上可以忽略那里有一个参数y
。
所以你的方法需要和你一样:
plot.ABI <- function(x, base, ...)
问题是,与您引用的脚本相反,您必须将泛型重新定义为
plot(x)
由于缺少…
,R CMD检查
会正确地抱怨。
因此,如果泛型已经存在,请不要记录或提供它。
几个问题:
>
不要包含在其他地方已经定义的泛型。只需添加您的方法。
每个方法的签名必须至少包含泛型中的每个元素,顺序相同。这有时很烦人,但无可争议。
更新
我说过,“你的@export
需要列出函数名”,但显然这是不正确的。请参阅注释。另请注意,列出方法应该导出它。我似乎记得,在包的命名空间中不包含泛型的情况下,需要显式导出,但我可能错了(经常是!)。