Per documentare le classi con roxygen (2), specificare un titolo e una descrizione / dettagli sembra essere lo stesso di funzioni, metodi, dati, ecc. Tuttavia, gli slot e l'eredità sono il loro stesso tipo di animale. Qual è la migliore pratica - attuale o pianificata - per documentare le classi S4 in roxygen2?
Diligenza dovuta:
Ho trovato la menzione di un @slot
tag nelle prime descrizioni di roxygen.
Un post della mailing list R-forge del 2008
sembra indicare che questo è morto, e non c'è supporto per @slot
in roxygen:
È vero per roxygen2? Il post precedentemente citato suggerisce che un utente dovrebbe invece creare il proprio elenco dettagliato con markup LaTeX. Ad esempio una nuova classe S4 che estende la "character"
classe sarebbe codificata e documentata in questo modo:
#' The title for my S4 class that extends \code{"character"} class.
#'
#' Some details about this class and my plans for it in the body.
#'
#' \describe{
#' \item{myslot1}{A logical keeping track of something.}
#'
#' \item{myslot2}{An integer specifying something else.}
#'
#' \item{myslot3}{A data.frame holding some data.}
#' }
#' @name mynewclass-class
#' @rdname mynewclass-class
#' @exportClass mynewclass
setClass("mynewclass",
representation(myslot1="logical",
myslot2="integer",
myslot3="data.frame"),
contains = "character"
)
Tuttavia, anche se questo funziona, questo \describe
, \item
l'approccio per documentare gli slot sembra in contrasto con il resto del roxygen (2), in quanto non ci sono @
tag delimitato da e slot poteva andare senza documenti, senza obiezioni da parte roxygenize()
. Inoltre non dice nulla su un modo coerente di documentare l'ereditarietà della classe che viene definita. Immagino che la dipendenza generalmente funzioni ancora bene (se un determinato slot richiede una classe non base da un altro pacchetto) usando il @import
tag.
Quindi, per riassumere, qual è l'attuale best practice per gli slot roxygen (2)?
Sembra che ci siano tre opzioni da considerare al momento:
- A - Elenco dettagliato (come nell'esempio sopra).
- B -
@slot
... ma con tag / implementazione extra mi sono perso. Non sono riuscito a far funzionare @slot con roxygen / roxygen2 nelle versioni in cui era incluso in sostituzione dell'elenco dettagliato nell'esempio sopra. Ancora una volta, l'esempio sopra funziona con roxygen (2).- C - Qualche tag alternativo per specificare slot, come
@param
, che realizzerebbe la stessa cosa.
Sto prendendo in prestito / estendo questa domanda da un post che ho fatto alla roxygen2
pagina di sviluppo su github .
setClass
dichiarazioni rispetto a setMethod
. Effettuare il cambiamento una volta @slot
implementato non sarà troppo doloroso.
@slot
è probabilmente quello che vuoi a lungo termine, ma deve essere implementato prima ...