Wie untersuchen Sie den code in eine Funktion in R, die das Objekt der Klasse sensibel
Ich versuche, eine Funktion schreiben, die einen bestimmten job tun (in meinem Fall, die analyse eines Datensatzes für "Ausreißer"), so dass die ersten Dinge, die ich tun möchten, ist Blick auf, was andere Menschen getan haben, ähnliche stellen.
Kann ich tun, das laden eines bestimmten Pakets und untersuchen Sie den code der Funktion, sondern einige Funktionen scheinen davon abzuhängen, welche Klasse von Objekt, das Sie um sich werfen
>library(outliers)
> fix(outlier)
function (x, opposite = FALSE, logical = FALSE)
{
if (is.matrix(x))
apply(x, 2, outlier, opposite = opposite, logical = logical)
else if (is.data.frame(x))
sapply(x, outlier, opposite = opposite, logical = logical)
else {
if (xor(((max(x) - mean(x)) < (mean(x) - min(x))), opposite)) {
if (!logical)
min(x)
else x == min(x)
}
else {
if (!logical)
max(x)
else x == max(x)
}
}
}
Wie kann man sich den code von etwas, das ändert sich je nach dem Objekt ?
Edit:
OK, Palm <- Gesicht. Die Funktion habe ich als Beispiel verwendet nur Anrufe selbst, aber allt er code ist es... ich habe gesehen, andere Beispiele (aber kann nicht jeder denken offhand), wo die Funktion haben, andere Dinge, je nach der Klasse des Objekts geworfen, so stellt sich die Frage, auch wenn es ein schlechtes Beispiel !
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie sagen,
sind Sie bereits im Herzen der S3-dispatch-Mechanismus! So
Ich würde empfehlen, das Lesen ein Buch über Programmierung in R, wie z.B.
oder andere Ressourcen von dieser Frage ALSO auf R Bücher zusammen mit einem Beispiel-Paket oder zwei von den reichen Satz von CRAN-Pakete.
Meine Gedanken für die Suche nach Funktionscode neigt zu:
Geben Sie zunächst den Namen der Funktion
Fall 1: Es zeigt den code
Toll, du bist fertig.
Beispiel: diag
Fall 2: Die Funktion wird als eine Zeile UseMethod-Anweisung
Haben Sie eine S3-Methode.
Geben Sie
methods(fnname)
zur Verfügung stehenden Methoden,dann
getAnywhere(fnname.myclass)
.Beispiel: meine
Fall 3: Die Funktion enthält .Internen oder .Primitive Aussage
Die Funktion ist in C geschrieben, für bessere performance.
Laden Sie eine Kopie des R-source-code und extrahieren Sie das tar-Archiv.
Suchen Sie in das src-Verzeichnis für den Namen der Funktion.
EDIT: Sie können die Suche auch nach der Datei mit der Google-oder Yahoo-site-Suche.
Ende BEARBEITEN
Beispiel: qnorm
Einer einfachen windows-Suche nach "qnorm" in das src-Verzeichnis der R-source-code zeigt die Datei qnorm.c enthält die definition der Funktion.
EDIT:
qnorm.c ist auch das top-Ergebnis von der Suche
Ende BEARBEITEN
Fall 4: immer Noch nicht finden können, die Funktion
Ist es wahrscheinlich eine Methode der S4-Klasse.
Typ
class(myobj)
um die Klasse zu finden.Typ
showMethods(class="myclass")
zu finden, die verfügbaren Methoden für diese Klasse.Typ
getMethods("fnname", "myclass")
.Beispiel: plot pixmap
Dies erfordert die pixmap-Paket.
Zum Beispiel plot() wird verschiedene Dinge tun, je nach Objekt. Können Sie sehen, die spezifischen plot-Funktionen (Methoden genannt) mit plot.ts(), plot.lm(), etc. D. H., plot() wird der Aufruf plot.ts (), wenn ein ts-Objekt übergeben. Im Allgemeinen plot.xxx() wird angewendet, um Objekte der Klasse xxx. Wenn es gibt keine spezifische Methode für die Klasse, dann plot.(default) verwendet.
Die Funktion plot() wird aufgerufen, eine generische Funktion, denn es kann auf viele verschiedene Klassen. Andere häufige generischen Funktionen summary(), print() und predict().
Wie Dirk sagt, es lohnt sich auch das Lesen der Dokumentation auf S3-Methoden und-Klassen.
Für einen anderen Fall, die nicht in den Antworten hier finden Sie die Antworten berichtet in "view source-code in R"
welche sich mit dem Fall von Funktionen, die zeigen, wie "Nicht-sichtbar" beim ausführen von Methoden (- Funktion.Ich.bin.suchen.für)
Kurz gesagt, Sie können, dann verwenden Sie einen Befehl der form: package:::function.class
um zu sehen, den code, den Sie möchten.
Stolperte ich kürzlich über die CRAN Meta-repository auf GitHub, die im Grunde hält einen nur-lese-version aller Pakete im CRAN-repository. Sie können nach Paketnamen, nach der Auswahl der Pakete, die Sie nach dort ist ein Ordner namens " R Rahmen, in dem sich der source-code in R.
Zum Beispiel, suchte ich für das Paket mboost, klickte auf den in und in die R Ordner, der zeigt, was diese Liste der code -.
Hatte ich noch nicht einen Fall, wo dennoch konnte ich nicht finden was ich suchte.
Ich habe auch noch nicht so weit, um zu sehen, wenn ALLE zugrunde liegenden C - /C++ - code gezeigt oder verlinkt, aber es war für die mboost Beispiel oben. Der c-code wurde in einer anderen top-level-Ordner namens src