Anonyme Funktionen
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 27 von 64.
In R ist eine Funktion ein Wert wie eine Zahl oder eine Zeichenkette. function(x) x * 2 erstellt eine Funktion, ohne ihr einen Namen zu geben, und der Wert ihres letzten Ausdrucks ist das, was sie zurückgibt:
double <- function(x) x * 2
print(double(21))
print((function(x) x + 1)(9))Ausgabe:
[1] 42
[1] 10R 4.1 hat eine Kurzform hinzugefügt: \(x) bedeutet dasselbe wie function(x). Verwende geschweifte Klammern, wenn der Rumpf mehrere Zeilen benötigt:
square <- \(x) x^2
label <- function(x) {
size <- if (x > 10) "big" else "small"
paste(x, "is", size)
}
print(square(4))
print(label(12))Ausgabe:
[1] 16
[1] "12 is big"Da Funktionen Werte sind, kann eine Liste mehrere davon unter Namen speichern. ops[["inc"]] ist eine Funktion, daher ruft ops[["inc"]](5) sie auf:
ops <- list(inc = \(x) x + 1, neg = \(x) -x)
print(ops[["inc"]](5))
print(names(ops))Ausgabe:
[1] 6
[1] "inc" "neg"Eine Funktion kann mehrere Argumente übernehmen und einigen davon Standardwerte geben, genau wie eine benannte Funktion:
area <- \(w, h = w) w * h
print(area(3))
print(area(3, 5))Ausgabe:
[1] 9
[1] 15Aufgabe
EinfachVervollständige die Liste ops mit drei anonymen Funktionen mit jeweils einem Argument:
doublegibt das Argument multipliziert mit 2 zurücksquaregibt das Argument multipliziert mit sich selbst zurücknegategibt das Argument mit umgekehrtem Vorzeichen zurück
Der bereitgestellte Code liest den Namen einer Operation und eine Zahl ein, ruft diese Funktion aus ops auf und gibt das Ergebnis aus.
Probier es selbst
ops <- list(
# Schreibe deinen Code hier
double = function(x) x
)
# Mitgelieferter Ein-/Ausgabecode: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
f <- ops[[input[1]]]
cat(f(as.numeric(input[2])), sep = "\n")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik und Ablaufsteuerung
1Strings im Detail
Teilstrings mit substr()Formatierung mit sprintf()Aufteilen und VerbindenStrings durchsuchenText ersetzenWiederholung – Benutzernamen-Generator4Matrizen
Matrizen erstellenMatrizen indizierenZusammenfassungen von Zeilen und SpaltenMatrizenarithmetikRückblick – Sitzplan10Fortgeschrittener Kontrollfluss
Die switch()-FunktionVektorisierter ifelse()repeat und breakRekursive FunktionenRückblick – Notenklassifizierung2Schlüssel-Wert-Suchen
Benannte Vektor-SuchenSchlüssel prüfenSchlüssel hinzufügen und entfernenNamen durchlaufenRückblick – Aktienübersicht5Projekt – Notenbuch
Schüler hinzufügenNoten eintragen3Mengen und Zählen
Eindeutige WerteMengenoperationenZugehörigkeitstestsZählen mit table()Rückblick – Gäste einer Veranstaltung6Funktionen als Werte
Anonyme FunktionenFunktionen übergebenFunktionen zurückgebenClosures mit ZustandRückblick – Rabattregeln9Datenrahmen
Datenrahmen erstellenSpalten und ZeilenZeilen filternHinzufügen und SortierenZusammenfassung – Verkaufsbericht12Projekt – Ausgaben-Tracker
Ausgaben erfassenGesamtausgabenÜbe selbstständig: Online-R-Compiler