2013-04-10 9 views
36

Kurzversion: Kann ich die Dokumentation von Normal in Paket emulieren statsroxygen mit?Mehrere Funktionen in einer .rd Datei

Lange Version: Ich arbeite an einem Paket und versuchte, die Dokumentation lesbarer zu machen, indem ich eine Reihe von Funktionen mit gemeinsamen Eingaben/Parametern unter einer Überschrift gesammelt habe, was eine generische Referenz auf die Gruppe sein wird. Jede Funktion sollte dem Endbenutzer unabhängig zur Verfügung stehen.

Ich nahm als Inspiration die Dokumentation für Normal, die eine Anzahl von Methoden im Zusammenhang mit der Normalverteilung gibt, z.B. stats::dnorm().

Wenn ich suche ?dnorm Ich finde den Namen der Hilfe Abschnitt ist Normal, obwohl Normal scheint keine exportierte Funktion oder Objekt zu sein.

Was ich habe versucht, nach dem in funs.R setzt:

##' @rdname funs 
##' @name funs 
##' @aliases sum1 
##' @aliases prod1 
##' @title Two functions 
##' @param x X 
##' @param y Y 
##' @return sum1 returns x+y 
##' \cr 
##' prod1 returns x*y 
##' @examples 
##' sum1(3,4) 
##' prod1(3,4) 
##' @export 
sum1 <- function(x,y) x+y 
##' @export 
##' @rdname funs 
prod1 <- function(x,y) x*y 

ich dann roxygen2 auf dem oben laufen. Die Schwierigkeit besteht darin, dass beim Ausführen von R CMD check für dieses minimale Paket das Paket nicht als undefined exports: funs geladen werden kann. Wenn ich die Zeile ##' @name funs entferne, übergibt das Paket R CMD check, aber der Name des Hilfeabschnitts lautet sum1 statt funs. Wenn ich die folgende unterhalb der Beispiele Abschnitt hinzufügen:

##' @export 
funs <- function(x) x 

Es geht, und ich kann die Hilfe sehen formatiert, wie ich möchte, aber ich bin eine bedeutungslose Funktion, um den Export, den Namen zu erhalten korrekt anzuzeigen.

Ich habe versucht, in den Quellhilfedateien für stats zu sehen, wie es erreicht wurde, aber sie sind in .Rdx Format, das ich nicht sicher bin, wie angezeigt wird.

Auch in Bezug auf eine verwandte Notiz, was ist das für eine Art istNormal?

require(stats) 
getAnywhere("Normal") 
> no object named 'Normal' was found 

Update:

@TylerRinker - ich fürchte, das das erste, was war ich versucht hatte. Damit werden die Funktionen in einem .Rd Datei kombiniert, aber der Name der zugehörigen Hilfe ist der gleiche wie der Name der ersten Funktion, das ist, was ich versuche zu vermeiden:

##' sum 
##' gives the sum 
##' @param x X 
##' @param y Y 
##' @return sum1 returns x+y 
##' @examples 
##' sum1(3,4) 
##' @rdname funs 
##' @export 
sum1 <- function(x,y) x+y 
##' product 
##' gives the product 
##' @return prod1 returns x*y 
##' @examples 
##' prod1(3,4) 
##' @rdname funs 
##' @export 
prod1 <- function(x,y) x*y 

@Andrie - diese Lösung bewirkt genau das gleiche Schwierigkeit, der Name der Hilfe ist der gleiche wie die erste Funktion. dies ist

Vielleicht einfach nicht möglich ...

+1

Ich kann falsch liegen, aber das ist, wie ich das handhabe: https://github.com/trinker/reports/blob/master/R/GQ.R –

+1

Entfernen Sie '## '@name Spaß und es sollte funktionieren (Ich denke). – Andrie

+5

Relevanter Beitrag von [Hadley] (http://r-pkgs.had.co.nz/man.html#dry2), Verwendung der Option '@ describeIn'. – zx8754

Antwort

18

Dies ist die beste Abhilfe, die ich gefunden habe, wird aber froh sein, akzeptierte Antwort zu ändern, wenn etwas besser kommt ...

##' @name funs 
##' @aliases sum1 
##' @aliases prod1 
##' 
##' @title Two functions of x and y 
##' 
##' @param x =X 
##' @param y =Y 
##' 
##' @note \code{funs} is a generic name for the functions documented. 
##' \cr 
##' If called, \code{funs} returns its own arguments. 
##' 
##' @rdname funs 
##' @export 
funs <- function(x,y) {identity(c(x,y))} 
##' 
##' @rdname funs 
##' @return \code{sum1(x,y)} returns x+y 
##' @examples 
##' sum1(3,4) 
##' @export 
sum1 <- function(x,y) x+y 
##' 
##' @rdname funs 
##' @return \code{prod1(x,y)} returns x*y 
##' @examples 
##' prod1(3,4) 
##' @export 
prod1 <- function(x,y) x*y 

Beachten Sie, dass die Formatierung vermeidet die Verwendung von @usage, um diese a reportable bug zu vermeiden machen.

Ich kann sehen, wie dies besser auf github adressiert worden sein kann.

Eine bessere Lösung, die @usage nicht verwendet ist die folgende Zeile hinzufügen:

##' @usage funs(x,y) A nominal function of x and y 

nach dem ersten Einsatz von

##' @rdname funs 
##' @export 

aber ich versuche, die nicht zu minimieren. von von R CMD check geworfen, um Warnungen der Kräfte zu beschwichtigen, dass insbesondere der folloiwng sein:

Functions with \usage entries need to have the appropriate \alias 
    entries, and all their arguments documented. 
    The \usage entries must correspond to syntactically valid R code. 

Letzteres kann ein Fehler von meiner Lektüre der Dokumentation für @usage sein.

Vielen Dank.

+2

Ich glaube nicht, dass Sie @aliases benötigen, diese werden automatisch mit @rdname Spaß hinzugefügt. Zweitens muss @usage nur R-Code enthalten. Wenn Sie also einen Kommentar hinzufügen möchten, fügen Sie ihn nach einem Kommentar '## 'ein #usage macht Spaß (x, y) # Eine nominale Funktion von x und y' – Calimo

+0

Ich sehe, wie das geht Funktioniert für Funktionen. Wie würde man es für Datensätze modifizieren? – jebyrnes

15

Soweit ich weiß, ist die einzige Möglichkeit, 3 Namen in Ihrer .RD-Datei dokumentiert zu haben, 3 tatsächliche Objekte zu dokumentieren, wie Sie es taten. Aber der Trick ist: einer von ihnen kann NULL sein und nicht exportiert werden!

##' @name funs 
##' @rdname funs 
##' 
##' @title Two functions of sum1 and prod1 
##' 
##' @param x =X 
##' @param y =Y 
##' 
##' @return x*y (prod1) or x+y (sum1). 
NULL 

##' @rdname funs 
##' @examples 
##' sum1(3,4) 
##' @export 
sum1 <- function(x,y) x+y 

##' @rdname funs 
##' @examples 
##' prod1(3,4) 
##' @export 
prod1 <- function(x,y) x*y 

Es sieht ziemlich hacky aus, aber es funktioniert.

Verwandte Themen