example - roxygen2 documentation data
Advertencia de consistencia del método S3 al construir el paquete R con Roxygen (1)
He creado un archivo roxygen para una función que usa S3 una clase. Yo roxygenize y luego construyo y verifico y obtengo una advertencia:
* 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.
Así que pasé tiempo estudiando:
http://cran.r-project.org/doc/manuals/R-exts.html#Generic-functions-and-methods & https://github.com/hadley/devtools/wiki/S3
Pero no puedo entender lo que he hecho mal en el archivo de abajo. La función funciona como se espera.
1) ¿Por qué está ocurriendo la advertencia? 2) ¿Cómo puedo hacer que desaparezca?
#'' 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))
}
Creo que esto sucede porque un método debe tener todos los mismos argumentos que el genérico. Entonces agregue ...
a los argumentos de common.list()
. Me gusta esto:
common.list <- function(word.list, overlap = "all", equal.or = "more", ...)
De manera similar, common.default()
debe tener word.list
como argumento.