我已经阅读了以下两个讨论:
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
消失,我尝试更换参数log
和label
的位置,x
之后的任何参数都将在行function(x, log, ...)
中消失,那么如何解决这个问题?
答案 0 :(得分:0)
您使用plot()
通用功能作为示例,还是实际上是您的代码?
如果是后者,我认为这是因为plot()
是一个基本的R函数,需要三个参数:x,y和....为了让你自己的s3方法通过检查,不需要重新定义你自己的泛型,并且你的s3方法也必须遵循与基本R generic完全相同的参数。
答案 1 :(得分:0)
当我使用s3方法对软件包运行R CMD check
或devtools: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')进行绘制)。
让我知道警告是否消失。