我已经阅读了以下两个讨论:
Roxygen2 - 如何正确记录 S3 方法
使用 Roxygen
构建 R 包时的 S3 方法一致性警告还有以下两个教程:
http://cran.r-project.org/doc/manuals/R-exts.html#Generic-functions-and-methodshttp://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, ...)
行消失,那么如何解决这个问题呢?
您是使用plot()
泛型函数作为示例还是实际上是您的代码?
如果是后者,我认为这是因为plot()
是一个基本的 R 函数,它接受三个参数:x、y 和 ...。若要让你自己的 s3 方法通过检查,无需重新定义你自己的泛型,而且你的 s3 方法也必须遵循与基本 R 泛型完全相同的参数。
当我使用 s3 方法对我的包运行R CMD check
或devtools:check()
时,我遇到了同样的问题,由于一致性 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'(绘制(。
让我知道警告是否已消失。