2014-06-16 5 views
7

Sto scrivendo un pacchetto utilizzando per la documentazione. Sto avendo qualche problema a documentare i metodi S4. Ho definito un metodo generico (ad esempio myGeneric) e alcuni metodi che lo implementano.Documenta automaticamente tutti i metodi di un generico S4, utilizzando roxygen2

Domanda: esiste un modo per documentare automaticamente tutti i metodi di un generico?

La soluzione manuale è quello di aggiungere queste due righe per ciascun metodo (questo sarebbe per il primo metodo nel mio esempio fittizio):

##' @rdname myGeneric-methods 
##' @aliases myGeneric,numeric,numeric,missing-method 

Da quando uso un sacco di metodi, devo aggiungere un lotto per soddisfare il controllo R CMD.


ho letto in Hadley avanzata in merito a documentare i metodi S4 here che si può usare @genericMethods:

Usare @genericMethods nella documentazione generica, se si desidera un elenco automatizzata di tutti i metodi implementati per la generico.

Penso che questo non sia implementato in roxygen2 o implementato con un altro nome. L'unica cosa che ho trovato sul tag @genericMethods era nel github roxygen3 here, che è stato interrotto (?).


Solo un esempio fittizio, dove mi documento solo il generico e voglio tutti i metodi implementati elencati automaticamente:

##' @param object An object 
##' @param data Numeric vector or data.frame 
##' @param Fun Function. Default function is \code{sum} 
##' @param ... Extra named arguments passed to FUN 
##' @docType methods 
##' @export 
setGeneric("myGeneric", function(object, data, FUN, ...) 
      {standardGeneric ("myGeneric")}) 

setMethod("myGeneric", c("numeric", "numeric", "missing"), 
      function(object, data,...) { 
       myGeneric(object, data, sum,...) 
      }) 
setMethod("myGeneric", c("numeric", "data.frame", "missing"), 
      function(object, data,...) { 
       myGeneric(object, as.vector(unlist(data), sum,...) 
      }) 
setMethod("myGeneric", c("numeric", "numeric", "function"), 
      function(object, data, FUN,...) { 
      ## Do something 
      }) 

Qualsiasi aiuto sarà molto apprezzato,

alex

+1

non so un modo per documentare automaticamente tutti i metodi di un generico (magari quando '@ genericMethods' sarà implementato). Io uso invece '# '@describeIn myGeneric' di fronte a tutti i miei metodi specifici. Questo non risponde esattamente alla tua domanda, ma penso che sia l'unico modo per ottenerlo per il momento. – jomuller

+0

Ho cercato nel [repository ufficiale di GitHub] (https://github.com/klutometis/roxygen) di roxygen e non ho fondato alcun roclet che dovrebbe fare questo lavoro. Penso che la lista completa dei roclet sia in [/roxygen/R/rocled-rd.R](https://github.com/klutometis/roxygen/blob/d564939daed853988eaa72bb034536c37d7e097c/R/roclet-rd.R). – jomuller

+0

Ho aggiunto un [problema su GitHub] (https://github.com/klutometis/roxygen/issues/264). – jomuller

risposta

8

EDIT: aggiornato per riflettere il metodo preferito per l'ultima versione di roxygen2 - 23 marzo 2016

In realtà, si può fare questo molto più facile con l'utilizzo di @rdname in roxygen2:

#' @param object An object 
#' @param data Numeric vector or data.frame 
#' @param Fun Function. Default function is \code{sum} 
#' @param ... Extra named arguments passed to FUN 
#' @rdname myGeneric 
#' @export 
setGeneric("myGeneric", function(object, data, FUN, ...) 
      {standardGeneric ("myGeneric")}) 

#' @rdname myGeneric 
setMethod("myGeneric", c("numeric", "numeric", "missing"), 
      function(object, data,...) { 
       myGeneric(object, data, sum,...) 
      }) 

#' @rdname myGeneric 
setMethod("myGeneric", c("numeric", "data.frame", "missing"), 
      function(object, data,...) { 
       myGeneric(object, as.vector(unlist(data), sum,...) 
      }) 

#' @rdname myGeneric 
setMethod("myGeneric", c("numeric", "numeric", "function"), 
      function(object, data, FUN,...) { 
      ## Do something 
      }) 

fa il trucco per me con la versione 5.0.1 roxygen2

+1

Credo che @describeIn ora abbia bisogno di un secondo argomento che fornisca una descrizione, ad es. '@describeIn myGeneric il metodo per fare qualcosa di diverso', vedi https://cran.r-project.org/web/packages/roxygen2/vignettes/rd.html – cboettig

+0

@cboettig Questo è corretto. Puoi semplicemente usare @ rdname ora per puntare al file Rd dove vuoi aggiungere il metodo extra.Grazie per avermi informato in modo da poter aggiornare le informazioni –