Wie man die Grenzen in R Kreuz

Während mit Funktionen in R arbeiten, manchmal, Sie arbeiten mit einigen Objekten, die Sie nicht zuerst im Arbeitsbereich erstellt haben. Sie verwenden die Argumente x

Menu

, mult, und SPASS als ob sie sind Objekte, und erstellen Sie ein Objekt Prozent innerhalb der Funktion, die Sie nicht in den Arbeitsbereich zurück, nachdem mit der Funktion finden. So was ist los?

Erstellen Sie einen Testfall

Lassen Sie uns durch ein kleines Beispiel herausfinden. Erstellen Sie zunächst ein Objekt x und eine kleine Test() funktioniert wie folgt aus:

x lt; - 1: 5test lt; - Funktion (x) {cat ( "Das ist x:" x " n") rm (x) Katze ( "Dies ist x nach dem Entfernen:" x " n")}

Das Test() Funktion tun nicht viel. Es dauert ein Argument x, druckt er auf die Konsole, entfernt es und versucht es erneut zu drucken. Sie mögen denken, diese Funktion wird fehlschlagen, weil x verschwindet nach der Zeile rm (x). Aber nein, wenn Sie versuchen, diese Funktion ist es ganz gut funktioniert, wie im folgenden Beispiel gezeigt:

> Test (5: 1) Dies ist x: 5 4 3 2 1This ist x nach dem Entfernen: 1 2 3 4 5

Auch nach dem Entfernen x, R kann immer noch finden eine andere x dass es drucken. Wenn Sie ein bisschen genauer ansehen, sehen Sie, dass die x in der zweiten Zeile gedruckt ist eigentlich nicht die, die Sie als Argument gab, aber die x Sie erstellt, bevor sie in den Arbeitsbereich. Woher?

Suchen Sie den Pfad

Wenn Sie eine Funktion verwenden, erstellt die Funktion zunächst eine temporäre lokale Umgebung. Diese lokale Umgebung ist verschachtelt im globalen Umfeld, das bedeutet, dass von dieser lokalen Umgebung, können Sie auch ein beliebiges Objekt aus der globalen Umgebung zugreifen können. Sobald die Funktion endet, wird die lokale Umgebung zusammen mit allen Objekten in zerstört.

Um ganz korrekt ist, eine Funktion immer eine Umgebung, in der Umgebung schafft es aus aufgerufen wird, die so genannte Eltern-Umgebung. Wenn Sie eine Funktion aus dem Arbeitsbereich durch ein Skript oder über die Befehlszeile aufrufen, geschieht dies übergeordnete Umwelt die globale Umwelt zu sein.

Wenn R eine beliebige Objektnamen in jedem Code in der Funktion erwähnt sieht, sucht er zuerst die lokale Umgebung. Denn es findet ein Objekt x dort, verwendet es, dass eine für den ersten Katze() Erklärung. In der nächsten Zeile, entfernt R das Objekt x. So kann, wenn R die dritte Zeile erreicht hat, kann es nicht ein Objekt zu finden x in der lokalen Umgebung mehr. Kein Problem. R bewegt den Stapel von Umgebungen und überprüft, um zu sehen, ob es etwas suchen, wie eine findet x im globalen Umfeld. Denn es kann ein finden x dort, verwendet es, dass man in der zweiten Katze() Erklärung.

Wenn du benutzt rm () innerhalb einer Funktion, rm () wird, löschen Sie standardmäßig nur Objekte innerhalb dieser Funktion. Auf diese Weise können Sie vermeiden, aus dem Speicher ausgeführt wird, wenn Sie Funktionen schreiben, die auf großen Datenmengen arbeiten müssen. Sie können sofort große temporäre Objekte entfernen, anstatt darauf zu warten, die Funktion so am Ende zu tun.

Menü