S3方法一致性Roxygen构建ř包时警告(S3 method consistency warnin

2019-07-18 00:41发布

我已经创建了一个使用S3的一类功能的roxygen文件。 我roxygenize,然后建立和检查,并得到一个警告:

* checking S3 generic/method consistency ... WARNING
common:
  function(word.list, ...)
common.list:
  function(word.list, overlap, equal.or)

See section 'Generic functions and methods' of the 'Writing R
Extensions' manual.

所以我花时间学习:

http://cran.r-project.org/doc/manuals/R-exts.html#Generic-functions-and-methods & https://github.com/hadley/devtools/wiki/S3

但我不能找出我做错了下面的文件中。 该函数按预期工作。
1)为什么是警告出现? 2)我怎么才能让它消失?

#' Find Common Words Between Groups
#' 
#' Find common words between grouping variables (e.g. people).
#' 
#' @param word.list A list of names chacter vectors.
#' @param overlap Minimum/exact amount of overlap.
#' @param equal.or A character vector of c(\code{"equal"}, \code{"greater"}, 
#' \code{"more"}, \code{"less"}).
#' @param \dots In liu of word.list the user may input n number of character 
#' vectors.
#' @rdname common
#' @return Returns a dataframe of all words that match the criteria set by 
#' \code{overlap} and \code{equal.or}.
#' @export
#' @examples
#' a <- c("a", "cat", "dog", "the", "the")                                                              
#' b <- c("corn", "a", "chicken", "the")                                                                
#' d <- c("house", "feed", "a", "the", "chicken")                                                       
#' common(a, b, d, overlap=2)  
#' common(a, b, d, overlap=3)                                                                          
#'                                                                                                      
#' r <- list(a, b, d)  
#' common(r)                                                                                 
#' common(r, overlap=2)                                                                                            
common <-
function(word.list, ...){
    UseMethod("common")
}

#' @return \code{NULL}
#'
#' @rdname common
#' @method common list
#' @S3method common list
common.list <-
function(word.list, overlap = "all", equal.or = "more"){
    if(overlap=="all") {
        OL <- length(word.list) 
    } else {
        OL <- overlap
    }
    LIS <- sapply(word.list, unique)
    DF <- as.data.frame(table(unlist(LIS)), stringsAsFactors = FALSE)
    names(DF) <- c("word", "freq")
    DF <- DF[order(-DF$freq, DF$word), ]
    DF <- switch(equal.or,
        equal = DF[DF$freq == OL, ],
        greater = DF[DF$freq > (OL - 1), ],
        more = DF[DF$freq > (OL - 1), ],
        less = DF[DF$freq < (OL + 1), ])
    rownames(DF) <- 1:nrow(DF)
    return(DF)
}

#' @return \code{NULL}
#'
#' @rdname common
#' @method common default
#' @S3method common default  
common.default <-
    function(..., overlap = "all", equal.or = "equal"){
        LIS <- list(...)
        return(common.list(LIS, overlap, equal.or))
}

Answer 1:

我想,这是因为一个方法必须具有所有的相同的参数一般。 所以加...到的参数common.list() 像这样:

common.list <- function(word.list, overlap = "all", equal.or = "more", ...)

类似地, common.default()应具有word.list作为参数。



文章来源: S3 method consistency warning when building R package with Roxygen
标签: r r-s3