Wie auf interne Funktionen in R Verwenden

Schreiben Sie Ihre Funktionen so Manchmal kann es sehr hilfreich sein, interne Funktionen in R. zu verwenden, dass sie Objekte im globalen Umfeld braucht nicht wirklich sinnvoll, da Sie Funktionen verwenden, die Abhängigkeit von Objekten in der globalen Umwelt zu vermeiden, an erster Stelle.

In der Tat, wendet sich gegen das ganze Konzept hinter R stark in verschiedenen Funktionen verwendet globale Variablen. Als funktionale Programmiersprache, ist eine der wichtigsten Ideen von R, dass das Ergebnis einer Funktion nicht auf etwas anderes als die Werte für die Argumente dieser Funktion abhängig sein sollte. Wenn Sie die Argumente die gleichen Werte geben, erhalten Sie immer das gleiche Ergebnis.

Wenn Sie von anderen Programmiersprachen wie Java kommen, kann dieses Merkmal, das Sie als ungerade schlagen, aber es hat seine Vorzüge. Manchmal braucht man einige Berechnungen ein paar Mal innerhalb einer Funktion zu wiederholen, aber diese Berechnungen nur sinnvoll, innerhalb dieser Funktion.

Angenommen, Sie das Licht Produktion einiger Lampen mit halber Leistung und volle Leistung vergleichen möchten. Die Handtücher, die Sie vor dem Fenster legen Sie die Sonne aus zu blockieren sind nicht wirklich für den Job, so dass Sie auch messen, wie viel Licht noch durch kommt. Sie wollen den Mittelwert dieser Wert aus den Ergebnissen zu subtrahieren, um Ihre Messungen zu korrigieren.

Um die Effizienz bei 50 Prozent Leistung zu berechnen, können Sie die folgende Funktion verwenden:

calculate.eff lt; - Funktion (x, y, control) {min.base lt; - Funktion (z) z - mean (Kontrolle) min.base (x) / min.base (y)}

Im Inneren der calculate.eff () Funktion finden Sie eine weitere Funktionsdefinition für eine min.base () Funktion. Genau wie im Fall von anderen Objekten, wird diese Funktion in der lokalen Umgebung erstellt von calculate.eff () und wieder zerstört, wenn die Funktion ausgeführt wird. Sie werden nicht finden min.base () zurück in den Arbeitsbereich.

Sie können die Funktion wie folgt verwenden:

> Hälfte lt; - c (2,23, 3,23, 1,48)> full lt; - c (4,85, 4,95, 4,12)> nichts lt; - c (0,14, 0,18, 0,56, 0,23)> calculate.eff (halb, voll, nichts) [1] 0,4270093 0,6318887 0,3129473

Wenn man sich ein wenig genauer an der Definition der Funktion von min.base (), Sie feststellen, dass es ein Objekt verwendet steuern aber nicht über einen Streit mit diesem Namen. Wie funktioniert das dann? Wenn Sie die Funktion aufrufen, geschieht Folgendes:

  1. Die Funktion calculate.eff () schafft eine neue Umgebung lokale, die die Objekte enthält x (Mit dem Wert von fünfzig), y (Mit dem Wert von hundert), steuern (Mit dem Wert von nichts) Sowie die Funktion min.base ().

  2. Die Funktion min.base () erstellt eine neue lokale Umgebung innerhalb des einen von calculate.eff () enthält nur ein Objekt z mit dem Wert von x.

  3. min.base () sucht das Objekt steuern in der Umgebung calculate.eff () und subtrahiert den Mittelwert dieses Vektors aus jeder Anzahl von z. Dieser Wert wird dann zurückgegeben.

  4. Das gleiche passiert wieder, aber dieses Mal z wird der Wert von y.

  5. Beide Ergebnisse werden durch andere dividiert, und der Ergebnis wird erneut auf die globale Umwelt weitergegeben.

Die lokale Umgebung ist in der Umgebung eingebettet, wo die Funktion definiert ist, nicht dort, wo es heißt. Angenommen, Sie verwenden addPercent () innerhalb calculate.eff () die Zahlen zu formatieren. Die lokale Umgebung erstellt von addPercent () ist nicht in der einen eingebetteter calculate.eff () aber im globalen Umfeld, in dem addPercent () ist definiert.

Menü