Ich habe den folgenden Zusammenhang:Roxygen2: Dokumentieren von S3-Klasse als S4 verwendet, wenn R Basisfunktion Überlastung (cor)
ich Überlastung cor
Funktion Basis, so dass ich in meinem Paket habe .r Datei folgende Anweisung:
#'export
setGeneric("cor")
Jetzt möchte ich eine bestimmte Funktion für meine Objekte (Klasse stranger
genannt) schaffen - hier der Einfachheit halber halte ich nur mein Objekt ein data.table mit einer zusätzlichen Spalte .id
benannt ist.
#' Correlation for stranger objects
#' describeIn cor Correlation method for stranger objects.
setMethod("cor",signature(x="stranger"),function(x, method = c("pearson", "kendall", "spearman")){
selectMethod("cor","ANY")(x[,-'.id',with=FALSE],y=NULL, use="everything",method=method)
})
Wenn ich setGeneric
understant, stützt sie sich auf S4 Klassen - daher der signature
Parameter.
Aber ich verwende S4 Klassen nicht aber mein stranger
Objekt mit einfacher alter Art und Weise bauen:
buildClass <- function(x,...){
#... prepare out object as data.table with .ìd column
class(out) <- c("stranger", class(out))
return(out)
}
Das heißt, ich habe nicht S4-Klassen für mein Objekt. Dispaxing funktioniert immer noch: Aufruf cor
auf meine Objekte korrekt anwenden die dedizierte Methode.
Meine Frage ist über die richtige Dokumentation mit ROxygen2. Zur Zeit, als meine Funktionen Laden, ich folgende Meldung auftreten:
Updating stranger documentation
Loading stranger
Creating a generic function for 'cor' from package 'stats' in package 'stranger'
in method for 'cor' with signature 'x="stranger"': no definition for class "stranger"
Ich habe bereits sorgfältig Hadley Vignette auf roxygen2 lese plus einige Fragen, die auf Stackoverflow im Zusammenhang erscheinen, aber sie nur behandeln entweder mit klassischem S3 Mechanismus oder reiner S4 während ich habe keinen S4-Konstruktor mit setClass
und setGeneric
setzt auf S4.
Danke. Tatsächlich. Ich finde auch folgende Möglichkeit, die jede Notiz entfernt: put 'setOldClass (c (" Fremder "))' vor meiner fremden erzeugenden Funktion. Ich muss einige Zeit auf den Kopfgeldpreis warten. –
@EricLecoutre Schön, dass das geholfen hat! – duckmayr