检查S3通用函数/方法的一致性...警告

5

我已经阅读了以下两个讨论:
Roxygen2 - 如何正确记录S3方法
使用Roxygen构建R包时的S3方法一致性警告
以及以下两个教程:
http://cran.r-project.org/doc/manuals/R-exts.html#通用函数和方法
http://adv-r.had.co.nz/S3.html,
但我的问题仍未解决。以下是详细信息:
我想在一个包中定义plot()通用函数的S3方法,我的代码如下:

#' description
#'
#' more details
#'
#' @param x "test" object
#' @param label parameter one
#' @param log parameter two
#' @param ... graphical parameters to plot
#'
#' @examples
#' plot(a)
#'
#' @export
plot <- function(x, label=TRUE, log=TRUE,  ...){
  UseMethod("plot")
}

#' @export
plot.test <- function(x, label=TRUE, log=TRUE, ...){
# some code
}

运行devtools::check()后,我会收到以下警告:

checking S3 generic/method consistency ... WARNING
plot:
  function(x, log, ...)
plot.test:
  function(x, label, log, ...)

See section ‘Generic functions and methods’ in the ‘Writing R
Extensions’ manual.

看起来参数label消失了,我试着调换参数loglabel的位置,在function(x, log, ...)这一行后面的任何参数都会消失,那么该怎么修复呢?

2个回答

2

你是在使用plot()通用函数作为示例,还是这实际上是你的代码?

如果是后者,我认为原因是plot()是一个基本的R函数,需要三个参数:x、y和...。为了让你自己的s3方法通过检查,不需要重新定义自己的通用函数,而且你的s3方法必须遵循与基本的R通用函数完全相同的参数。


谢谢您指出这一点。plot() 通用函数是我想要添加方法的实际函数。那么您的意思是说我不能为我的函数 plot.test() 添加任何新参数吗? - David Lee
你可以这样做,但是你应该首先从通用函数中包含所有参数。在你的情况下:plot.test <- function(x, y, ..., label = TRUE, log = TRUE) { 或者如果你想允许按位置指定 labellogplot.test <- function(x, y, label = TRUE, log = TRUE, ...) {。然而请注意,即使图形包也没有遵循这个规则(在 plot.formula 中) - 似乎 plot 通用函数并不像它的使用那么通用。 - jan-glx

2
当我使用R CMD check或者devtools:check()来检查我的包中的S3方法时,总是因为一致性S3通用/方法而给出警告。我也使用Roxygen2,并尝试在具有S3通用函数的@export之前添加@rdname到我的函数中,这对我起了作用。请尝试以下代码:
##---- You can remove this---###
#plot <- function(x, label=TRUE, log=TRUE,  ...){
#  UseMethod("plot")
#}
#######################################

#' description
#'
#' more details
#'
#' @param x "test" object
#' @param label parameter one
#' @param log parameter two
#' @param ... graphical parameters to plot
#'
#' @examples
#' plot(a)
#' @rdname plot.test
#' @export
plot.test <- function(x, label=TRUE, log=TRUE, ...){
# some code
}

你可以删除第一个函数(使用UseMethod('plot')绘制的图)。请告诉我警告是否消失。最初的回答。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接