Wie ein Verfahren in R Dispatch

Ein nützliches Werkzeug, wenn sie mit Funktionen in R Umgang ist auf ein Verfahren Disposition. Eine Sache, über Funktionen in R zu erinnern ist, dass eine Funktion ein anderes Ergebnis basierend auf dem Typ des Wertes Sie die Argumente R ein Genie System geben geben kann, die so genannte allgemeine Funktionssystem,

dass können Sie verschiedene Funktionen aufrufen mit dem gleichen Namen.

Denken Sie über Datenrahmen und Listen. Wenn Sie eine Liste in der Konsole zu drucken, die Ausgabe in Reihen angeordnet bekommen. Auf der anderen Seite wird ein Datenrahmen auf die in Spalten angeordneten Konsole ausgegeben. Also, die drucken() Funktion behandelt Listen und Datenrahmen unterschiedlich, aber beide Male verwendet man die gleiche Funktion.

Finden Sie die Methoden hinter der Funktion

Es ist leicht zu finden, wenn Sie die gleiche Funktion beide Male verwendet - gerade innerhalb der Funktionscode Peek von drucken() durch seinen Namen in der Befehlszeile eingeben, wie folgt aus:

> Druckfunktion (x, ...) UseMethod ( "print")

Sie können die beiden letzten Zeilen ignorieren, weil sie nur von R-Entwickler verwendet werden. Aber nehmen Sie einen Blick auf die Funktion Körper - es ist nur eine Zeile!

Funktionen, die nicht viel tun, außer auf Objekte auf der rechten Seite Funktion übergeben werden genannt generische Funktionen. In diesem Beispiel drucken() ist eine generische Funktion. Die Funktionen, die die eigentliche Arbeit tun werden genannt Methoden.

Verwenden Sie Methoden mit UseMethod

Wie auf der Erde kann, dass eine Zeile Code in der drucken() Funktion tun so viele komplexe Dinge wie Druck Vektoren, Datenrahmen, und listet alle in einer anderen Art und Weise?

Die Antwort ist in der enthaltene UseMethod () -Funktion, die die zentrale Funktion in die generische Funktion System von R. ist UseMethod () sagt R entlang und suchen nach einer Funktion bewegen, die mit dem Objekttyp umgehen kann, das als Argument angegeben wird x.

R tut das, indem sie durch den vollständigen Satz von Funktionen auf der Suche nach einer anderen Funktion suchen, die mit beginnt drucken gefolgt von einem Punkt und dann den Namen des Objekttyps.

Sie können mit dem Befehl, dass selbst tun apropos ( 'print .'). Zwischen den Anführungszeichen, können Sie einen regulären Ausdruck setzen ähnlich wie in der grep () Funktion. Um R zu sagen, dass der Punkt wirklich einen Punkt bedeutet, müssen Sie es mit zwei Schrägstriche vorangestellt. Seien Sie nicht überrascht sein, wenn Sie über 40 verschiedene bekommen drucken() Funktionen für alle Arten von Objekten.

Angenommen, Sie einen Datenrahmen haben Sie drucken möchten. R wird die Funktion nachschlagen print.data.frame () und verwenden Sie diese Funktion, das Objekt zu drucken Sie als Argument übergeben. Sie können auch anrufen, die sich wie folgt funktionieren:

> small.one lt; - data.frame (a = 1: 2, b = 2: 1)> print.data.frame (small.one) a b1 1 22 2 1

Die Wirkung dieser Funktion unterscheidet sich in keiner Weise von dem, was Sie erhalten würden, wenn Sie die Generika verwendet print (small.one) Funktion statt. Das ist, weil drucken() geben die small.one zum print.data.frame () Funktion der sich darum kümmern.

Verwenden Sie die Standard-Methoden

Im Falle einer Liste, können Sie sich für eine zu suchen versucht print.list () Funktion. Aber es wird nicht funktionieren, weil die print.list () Funktion gibt es nicht. Das ist immer noch kein Problem für die R - R wird die Art des Objekts, in diesem Fall ignorieren und schauen nur für ein Standardmethode, print.default ().

Für viele generische Funktionen, gibt es eine Standardmethode, die gefunden werden, wenn kein spezifisches Verfahren verwendet wird kann. Wenn es einen gibt, können Sie die Standardmethode durch das Wort erkennen Standard nach dem Punkt in dem Funktionsnamen.

Also, wenn Sie den Datenrahmen als Liste ausdrucken möchten, verwenden Sie die Standard-Methode wie folgt aus:

> Print.default (small.one) $ a [1] 1 $ 2 b [1] 2 1attr ( "class") [1] "data.frame"

Menü