2013-08-29 9 views
10

Ich erstelle ein Paket und für S3 Methoden, die ich exportierenWie kann ich die S3-Methode exportieren, damit sie im Namespace verfügbar ist?

##' @method predict myclass 
##' @export 
predict.myclass <- function(object,...) { } 

Jetzt verwenden, wenn ich das Paket zu laden, dann predict Arbeiten auf Objekt der Klasse myclass, aber funktionieren predict.myclass nicht exportiert wird. Im NAMESPACE bekomme ich nur den Eintrag S3method(predict,myclass). Also gibt es eine Möglichkeit, predict.myclass auch zu exportieren, so dass Benutzer den Code predict.myclass bekommen, wenn er predict.myclass in der Konsole schreibt?

Antwort

8

Meine Antwort ist "Tu das nicht". Der Benutzer kann methods(predict); getAnywhere('predict.myclass') oder mypackage:::predict.myclass. Es gibt eine Lernkurve für den Benutzer, aber das Beherrschen dieser Methode hilft dem Benutzer bei der Navigation durch alle Methoden. Gründe, die Methode nicht zu exportieren, sind, dass sie nicht direkt aufgerufen werden soll und den Suchpfad mit unnötigen Symbolen überfüllt (jedes an der Eingabe eingegebene Symbol, z. B. ls(), muss gefunden werden, indem Objekte in allen Umgebungen durchsucht werden) zurückgegeben von search(), und Benutzerpakete wie Ihre stehen zwischen dem Start der Suche und Namensauflösung dieser häufig verwendeten Funktionen).

+0

OK, also hier ist eine andere Frage http://stackoverflow.com/questions/18513607/how-to-extend-s3-method-from-another-package-without-loading-the-package. Ich dachte, dass ich mein Problem mit zusätzlichem Export löse. – mpiktas

+2

Bist du sicher? [Laut Hadley] (https://cran.r-project.org/web/packages/roxygen2/vignettes/namespace.html), * jede S3-Methode muss exportiert werden *. Vielleicht verstehe ich deine Antwort falsch. –

+2

@ StéphaneLaurent das OP hat schon 'S3method (vorhersage, myclass)', was notwendig und ausreichend ist; Vielleicht ist es das, was Hadley meint "muss exportiert werden". Es ist weder notwendig noch zu empfehlen, 'export (predict.myclass)' 'zu exportieren. –