Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 绘图的新方法-如何导出?_R_Generics_Package_Roxygen - Fatal编程技术网

R 绘图的新方法-如何导出?

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

我正在制作一个包,我想在其中为plot定义一个新方法。我在源代码文档中使用roxygen。这个问题似乎非常类似于: 和 但我还是不能让它工作

给我带来麻烦的相关部件有:

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