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

时间:2018-03-07 05:24:01

标签: r object roxygen2 r-s3

我已经阅读了以下两个讨论:
Roxygen2 - how to properly document S3 methods
S3 method consistency warning when building R package with Roxygen
并遵循两个教程:
http://cran.r-project.org/doc/manuals/R-exts.html#Generic-functions-and-methods
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的位置,x之后的任何参数都将在行function(x, log, ...)中消失,那么如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您使用plot()通用功能作为示例,还是实际上是您的代码?

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

答案 1 :(得分:0)

当我使用s3方法对软件包运行R CMD checkdevtools:check()时遇到相同的问题,由于S3通用/方法的一致性,它总是向我发出警告。

我也使用Roxygen2,我尝试使用s3generic在@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')进行绘制)。

让我知道警告是否消失。