Wie untersucht man den Code einer Funktion in R, die Objektklasse sensitiv ist?

8

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!

    
PaulHurleyuk 17.09.2009, 14:47
quelle

5 Antworten

7

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.

  • (klassisch aber altmodisch) Venables / Ripley "S Programming",
  • Gentleman "Bioinformatik mit R",
  • Brown / Murdoch "Erster Kurs in statistischer Programmierung mit R",
  • Chambers "Software für Datenanalyse: Programmierung mit R",

oder andere Quellen von diese SO Frage zu R Büchern zusammen mit einem Beispielpaket oder zwei aus dem reichhaltigen Satz von CRAN-Paketen.

    
Dirk Eddelbuettel 17.09.2009, 15:18
quelle
28

Mein Denkprozess zum Finden von Funktionscodes ist tendenziell:

Geben Sie zuerst den Namen der Funktion ein

Fall 1: Es zeigt den Code

Groß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-Anweisung

Die 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 werden

Es 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%     
Richie Cotton 18.09.2009 13:20
quelle
4

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.

    
Rob Hyndman 17.09.2009 23:31
quelle
0

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 werden

Kurz gesagt können Sie dann einen Befehl der Form: package ::: function.class verwenden um den gewünschten Code zu sehen.

    
csfowler 04.09.2013 14:41
quelle
0

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

    
Dexter Morgan 15.01.2016 03:01
quelle

Tags und Links