2013-01-09 1 views
22

S3クラスを使用する関数のroxygenファイルを作成しました。私はroxygenize、その後構築し、チェックして、警告を得る:Roxygenを使用してRパッケージをビルドするときのS3メソッド一貫性警告

​​

をだから私は勉強の時間を費やし:

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)) 
} 
+0

@hadley編集に感謝します(適切な用語の使用法に関するヘルプ)。 –

答えて

22

これは、メソッドがジェネリックと同じ引数をすべて持っている必要があるためです。したがって、common.list()の引数に...を追加してください。このように:同様

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

common.default()は、引数としてword.listを持っている必要があります。

+0

私は昨日、あなたが示唆するように...を入れて渡しましたが、最初にコードを壊してしまいました(私は今、それが正しい引数を順序づける問題であることを認識しています)。私はとても緊密でした。私の不満を和らげてくれてありがとう。 –

+0

チップAndrieをありがとう。 +1 –

+0

ありがとう、@ハドリー。間違ったアドバイスを含むコメントを削除しました。 – Andrie

関連する問題