R 绘图的新方法-如何导出?
我正在制作一个包,我想在其中为plot定义一个新方法。我在源代码文档中使用roxygen。这个问题似乎非常类似于: 和 但我还是不能让它工作 给我带来麻烦的相关部件有:R 绘图的新方法-如何导出?,r,generics,package,roxygen,R,Generics,Package,Roxygen,我正在制作一个包,我想在其中为plot定义一个新方法。我在源代码文档中使用roxygen。这个问题似乎非常类似于: 和 但我还是不能让它工作 给我带来麻烦的相关部件有: #' Generic plot method #' #' @param x \dots #' @param ... \dots #' @export plot <- function(x, ...) UseMethod("plot") #' Default plot method #' #' @param x \dots
#' 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)
}
在争论中似乎存在分歧。但我不明白这一点,因为泛型有参数x和。。。我的ABI方法也是如此(除了base)
因此有两个问题,我希望这两个问题来自同一个问题:plot.ABI方法没有导出,包检查抛出警告
如何解决这个问题?有几个问题:
我说过,“您的
@export
需要列出函数名”,但显然这是不正确的。见评论。还请注意,列出该方法应将其导出。我似乎记得在包的名称空间中没有包含泛型的情况下需要显式导出,但我可能错了(通常是这样!)。问题是,您的方法需要与泛型具有相同的参数。假设您使用的是R随附的泛型:
> args(plot)
function (x, y, ...)
NULL
现在plot()
实际上是一个特例,因为您可以忽略那里有一个参数y
因此,您的方法需要与现有方法保持一致:
plot.ABI <- function(x, base, ...)
由于缺少…
,R CMD check
将正确地进行投诉
因此,如果通用方法已经存在,则不要记录或提供它。您不需要导出plot方法,只需要注册它,这就是
@S3method
的作用@method
仅用于记录函数。好的,太好了!我尝试了无数的可能性,这是我迄今为止最接近的解决方案。我确实认为重新定义一个泛型是很奇怪的。现在,我已经删除了前两个定义,并对plot.ABI参数重新排序:plot.ABI(x,…,base),它可以工作了!谢谢。re:@export,你不需要写函数名(根据哈德利的例子)。它导出“当前”功能。我想@bdh_dtu您根本不需要@export
。只有当您希望用户能够调用plot.ABI()
(不使用ABI::
)时,您才需要它,这通常是不需要的,但并非总是不需要。@GavinSimpson,是的,我理解。我只是想澄清一下,“@export”是一个有效的标记-函数名并不总是必需的。plot(x)这件事对我来说是个谜。我正确地引用了它,它确实给出了我发布的错误。我注意到情节很奇怪,“y”不需要定义。不过,订单重要吗?“…”是否可以始终位于末尾,并且类特定的参数是否可以附加到泛型参数?也就是说,它可以是(x,base,…)还是必须是(x,…,base)?尝试和错误将很快回答这个问题,但我感兴趣的是了解一般结构和规则!它可以是函数(x,base)
或函数(x,…,base)
。基本上,plot()
定义中的..
在第一个版本中用作base、
的占位符,在第二个版本中用作..base
的占位符。在本文中,可以将…
,理解为“可能提供的任何其他参数”。
plot.ABI <- function(x, base, ...)
plot(x)