2014-06-16 11 views
7

Ich schreibe ein Paket mit für die Dokumentation. Ich habe einige Probleme, die S4-Methoden zu dokumentieren. Ich habe ein generisches -Verfahren (z. B. myGeneric) und wenige Methoden definiert, die es implementieren.Dokumentieren Sie automatisch alle Methoden eines S4 generischen, mit roxygen2

Frage: Gibt es eine Möglichkeit, alle Methoden eines Generics automatisch zu dokumentieren?

Die manuelle Lösung ist es, diese beiden Linien für jede Methode hinzuzufügen (dies für das erste Verfahren in meinem Dummy Beispiel wäre):

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

Da ich eine Menge von Methoden verwenden, ich habe eine hinzufügen viel, um die R CMD-Prüfung zu erfüllen.


las ich in Hadley Advanced R über S4 Methoden here dokumentieren, dass man @genericMethods verwenden können:

Verwenden @genericMethods in der allgemeinen Dokumentation, wenn Sie eine automatische Auflistung aller Methoden für die Umsetzung wollen generisch.

Ich denke, das ist nicht in roxygen2 implementiert oder unter einem anderen Namen implementiert. Das einzige, was ich über das @genericMethods-Tag fand, war das roxygen3 github here, das (?) Eingestellt wurde.


nur ein Dummy Beispiel, wo ich nur die generische Dokumentation und wollen, dass alle implementierten Methoden automatisch aufgelistet:

##' @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 
      }) 

Jede Hilfe wird sehr geschätzt werden,

alex

+1

Ich kenne keine Möglichkeit, automatisch alle Methoden dokumentieren eines generischen (vielleicht wenn '@ genericMethods' implementiert wird). Ich verwende stattdessen '# '@describeIn myGeneric' vor all meiner spezifischen Methode. Dies beantwortet nicht genau Ihre Frage, aber ich denke, es ist der einzige Weg, um es für den Moment zu erreichen. – jomuller

+0

Ich suchte im [offiziellen GitHub Repo] (https://github.com/klutometis/roxygen) von roxygen und gründete kein roclet, das diesen Job tun sollte. Ich denke, dass die vollständige Roclet-Liste in [/roygen/R/rocled-rd.R](https://github.com/klutometis/roxygen/blob/d564939daed853988eaa72bb034536c37d7e097c/R/roclet-rd.R) steht. – jomuller

+0

Ich habe ein [Problem mit GitHub] (https://github.com/klutometis/roxygen/issues/264) hinzugefügt. – jomuller

Antwort

8

EDIT: Aktualisiert, um die bevorzugte Methode für die neueste Version von roxygen2 widerzuspiegeln - 23. März 2016

Eigentlich kann man bei der Verwendung von @rdname in roxygen2 dies viel leichter tun:

#' @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 
      }) 

funktioniert der Trick für mich mit roxygen2 Version 5.0.1

+1

Ich glaube @describeIn benötigt nun ein zweites Argument, das eine Beschreibung liefert, z.B. '@describeIn myGeneric die Methode, etwas anderes zu tun, siehe https://cran.r-project.org/web/packages/roxygen2/vignettes/rd.html – cboettig

+0

@cboettig Das ist richtig. Sie können jetzt einfach @ rdname verwenden, um auf die Rd-Datei zu verweisen, in der Sie die zusätzliche Methode hinzufügen möchten.Danke, dass Sie mich informiert haben, damit ich die Informationen aktualisieren konnte –