dyn*_*amo 5 generics r package roxygen
我正在制作一个包,我想为剧情定义一种新方法.我正在使用roxygen源代码文档.这个问题看起来非常类似于: 如何使用Roxygen从不同的包中正确记录泛型的S3方法? 和 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 ::: plot访问函数(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方法没有导出,包检查会发出警告.
我该如何解决这个问题?
几个问题:
不要包含已在其他地方定义的泛型。只需添加您的方法即可。
每个方法的签名必须至少以相同的顺序包含泛型中的每个元素。有时这很烦人,但这是无可争议的。
更新
我曾说过,“您@export需要列出函数名称”,但显然这是不正确的。看看评论。另请注意,列出方法应将其导出。我似乎记得在您没有在包的命名空间中包含泛型的情况下需要显式导出,但我可能是错的(经常是这样!)。
问题是您的方法需要与泛型具有相同的参数.假设您正在使用R提供的通用:
> args(plot)
function (x, y, ...) 
NULL
现在plot()实际上是一个特殊情况,因为你可以基本上忽略那里有一个参数y.
所以你的方法需要像你一样:
plot.ABI <- function(x, base, ...)
问题是,与引用的脚本相反,您必须将通用重新定义为
plot(x)
如果缺少那样...,R CMD check会正确地抱怨.
因此,如果已存在,请不要记录或提供通用.