Ich versuche eine Funktion für eine bestimmte Aufgabe zu schreiben (in meinem Fall analysiere ich einen Datensatz für Ausreißer), also möchte ich als erstes sehen, wie andere Leute ähnliche Aufgaben erledigt haben.
>Ich kann dies tun, um ein bestimmtes Paket zu laden und den Code einer Funktion zu untersuchen, aber einige Funktionen scheinen davon abhängig zu sein, welche Klasse von Objekten Sie darauf werfen
%Vor%Wie können Sie den Code von etwas betrachten, das sich abhängig vom Objekt ändert?
Bearbeiten:
OK, Palm & lt; - Gesicht. Die Funktion, die ich als Beispiel benutzte, nennt sich nur selbst, aber alles Code ist da ... Ich habe andere Beispiele gesehen (kann mir aber keine Gedanken machen), wo die Funktion je nach Klasse des geworfenen Objekts andere Dinge getan hat daran, so steht die Frage, obwohl es ein schlechtes Beispiel ist!
Wenn Sie sagen
Die Funktion hat andere Dinge gemacht abhängig von der Klasse des Objekts darauf geworfen
Sie sind bereits im Mittelpunkt des S3-Versandmechanismus! Damit Ich würde empfehlen, ein Programmierbuch auf R zu lesen, z.B.
oder andere Quellen von diese SO Frage zu R Büchern zusammen mit einem Beispielpaket oder zwei aus dem reichhaltigen Satz von CRAN-Paketen.
Mein Denkprozess zum Finden von Funktionscodes ist tendenziell:
Geben Sie zuerst den Namen der Funktion ein
Fall 1: Es zeigt den CodeGroßartig, du bist fertig.
Beispiel: diag
Fall 2: Die Funktion wird als One Line-UseMethod-Anweisung ausgegeben Sie haben eine S3-Methode.
Geben Sie methods(fnname)
ein, um die verfügbaren Methoden anzuzeigen.
dann getAnywhere(fnname.myclass)
.
Beispiel: Mittelwert
%Vor% Fall 3: Die Funktion enthält eine .Internal- oder .Primitive-AnweisungDie Funktion ist in C geschrieben, um die Leistung zu verbessern. Laden Sie eine Kopie des R-Quellcodes herunter und extrahieren Sie den Tarball. Suchen Sie im Verzeichnis src nach dem Funktionsnamen.
BEARBEITEN: Sie können die Datei auch mithilfe der Google- oder Yahoo-Site-Suche suchen.
%Vor%Ende EDIT
Beispiel: qnorm
Eine einfache Windows-Suche nach "qnorm" im src-Verzeichnis des R-Quellcodes zeigt die Datei qnorm.c, die die Funktionsdefinition enthält.
BEARBEITEN: qnorm.c ist auch das oberste Ergebnis der Suche
%Vor%Ende EDIT
Fall 4: Die Funktion kann immer noch nicht gefunden werdenEs ist wahrscheinlich eine Methode einer S4-Klasse.
Geben Sie class(myobj)
ein, um die Klasse zu finden.
Geben Sie showMethods(class="myclass")
ein, um nach verfügbaren Methoden für diese Klasse zu suchen.
Geben Sie getMethods("fnname", "myclass")
ein.
Beispiel: plot pixmap
Dies erfordert das Pixmap-Paket.
%Vor%Zum Beispiel wird plot () je nach Objekt verschiedene Dinge tun. Sie können die spezifischen Plotfunktionen (Methoden genannt) mit plot.ts (), plot.lm () usw. sehen. D. H. Plot () ruft plot.ts () auf, wenn ein ts-Objekt übergeben wird. Im Allgemeinen wird plot.xxx () auf Objekte der Klasse xxx angewendet. Wenn es keine spezifische Methode für die Klasse gibt, wird plot.default () verwendet.
Die Funktion plot () wird als generische Funktion bezeichnet, da sie auf viele verschiedene Klassen angewendet werden kann. Andere allgemeine Funktionen sind summary (), print () und predicate ().
Wie Dirk sagt, lohnt es sich, die Dokumentation zu S3-Methoden und -Klassen zu lesen.
Für einen anderen Fall, der in den Antworten nicht behandelt wird, sehen Sie sich die Antworten an, die in " Quelltext in R "
behandelt den Fall von Funktionen, die beim Ausführen von Methoden (function.I.am.looking.for)
als "nicht sichtbar" angezeigt werdenKurz gesagt können Sie dann einen Befehl der Form: package ::: function.class verwenden um den gewünschten Code zu sehen.
Ich bin kürzlich auf das CRAN Meta-Repository auf GitHub gestoßen , das im Grunde eine schreibgeschützte Version aller Pakete im CRAN-Repository enthält. Sie können nach Paketnamen suchen, nachdem Sie das Paket ausgewählt haben, hinter dem sich ein Ordner mit dem Namen R befindet, der den Quellcode in R enthält.
Zum Beispiel habe ich nach dem Paket mboost gesucht, auf das in geklickt und den R Ordner eingegeben, der das Liste der Codes .
Ich hatte noch keinen Fall, in dem ich nicht finden konnte, wonach ich suchte. Ich habe auch nicht so weit zu sehen, ob ALL zugrunde liegenden C / C ++ - Code gezeigt oder verknüpft ist, aber es war für das Beispiel mboost oben. Der C-Code befand sich in einem anderen Ordner der obersten Ebene namens src