Wie Funktionen als Argumente in R zu verwenden

In R können Sie eine Funktion selbst als Argument übergeben. Sie können ganz einfach den vollständigen Code einer Funktion zu einem neuen Objekt zuordnen. In ähnlicher Weise können Sie auch den Funktionscode auf ein Argument zuweisen. Dies eröffnet eine völlig neue Welt von Möglichkeiten. Hier sind ein paar Beispiele.

Verschiedene Möglichkeiten in R abzurunden

Es gibt verschiedene Optionen für die Zahlen gerundet wird. Das addPercent () Funktion verwendet runden() für das, aber Sie können eine der anderen Optionen verwenden möchten - zum Beispiel, Signif (). Das Signif () Funktion nicht rund auf eine bestimmte Anzahl von decimals- stattdessen rundet es auf eine bestimmte Anzahl von Ziffern. Sie können es nicht verwenden, bevor Sie anrufen addPercent (), weil das runden() Funktion in diesem Körper wird Chaos alles wieder auf.

Natürlich könnte man eine zweite Funktion speziell für das schreiben, aber es gibt keine Notwendigkeit, dies zu tun. Stattdessen können Sie einfach anpassen addPercent () so, dass man einfach die Funktion, die Sie als Argument verwenden möchten geben, wie folgt aus:

addPercent lt; - Funktion (x, mult = 100, FUN = rund, ...) {Prozent lt; - FUN (x * mult, ...) Paste (Prozent, "%", sep = "")}

Sie fügen ein Argument in die Liste - in diesem Fall, SPASS - und dann können Sie den Namen dieses Argument als Funktion verwenden. Auch einen Standardwert, der angibt funktioniert genauso wie bei anderen arguments- nur den Standardwert angeben - in diesem Fall, runden - nach einer = Schild.

Wenn Sie verwenden möchten Signif () jetzt die Zahlen zu drei Ziffern Runden, können Sie leicht tun, um das folgende Gespräch mit zu addPercent ():

> AddPercent (new.numbers, FUN = Signif, Ziffern = 3) [1] "82,2%" "2,49%" "162%" "40%"

was geschieht hier?

  1. Wie zuvor, nimmt R den Vektor new.numbers und multipliziert sie mit 100, denn das ist der Standardwert ist für mult.

  2. R weist den Funktionscode signif nach SPASS, so jetzt SPASS() ist eine perfekte Kopie Signif () und funktioniert genau die gleiche Weise.

  3. R nimmt das Argument Ziffern und gibt sie an SPASS().

Beachten Sie die Abwesenheit von Klammern in der Argument-Zuordnung. Wenn Sie die Klammern dort hinzugefügt, würden Sie das Ergebnis eines Aufrufs zuweisen Signif () anstelle der Funktion selbst. R würde interpretieren Signif (), in diesem Fall als eine verschachtelte Funktion, und das ist nicht das, was Sie wollen. Außerdem würde R einen Fehler aus, weil in diesem Fall, Sie rufen Signif () ohne Argumente und R mag das nicht.

Verwenden Sie anonyme Funktionen

Sie können selbstverständlich ist, kann jeder Funktion, die Sie für die wollen SPASS Streit. Diese Funktion muss nicht einmal einen Namen haben, weil Sie den Code effektiv zu kopieren. Anstatt also einen Funktionsnamen zu geben, können Sie fügen Sie einfach den Code als Argument als ein anonym Funktion. Eine anonyme Funktion ist eine Funktion ohne Namen.

Angenommen, Sie die Quartalsgewinne Ihres Unternehmens in einem Vektor wie dieses:

> Gewinne lt; - c (2100, 1430, 3580, 5230)

Ihr Chef bittet Sie berichten, wie viel Gewinn in jedem Quartal gegen für das Jahr auf das Gesamt gemacht wurde, und, natürlich, möchten, dass Sie verwenden addPercent () Funktion. Um die relativen Gewinne in Prozent berechnen, könnten Sie ein schreiben rel.profit () funktioniert wie folgt aus:

> rel.profit lt; - Funktion (x) Runde (x / Summe (x) * 100)

Aber Sie müssen nicht. Stattdessen können Sie die Funktion Körper selbst als Argument verwenden nur, wie im folgenden Beispiel:

> AddPercent (Gewinne, FUN = function (x) Runde (x / Summe (x) * 100)) [1] "17%" "12%" "29%" "42%"

Natürlich ist dies nicht der optimale Weg, um diese besondere Aufgabe zu tun. Sie könnten leicht das gleiche Ergebnis haben, mit dem folgenden Code bekommen:

> AddPercent (Gewinne / Summe (Gewinne)) [1] "17%" "12%" "29%" "42%"

Menü