Menu
Coddy logo textTech

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] 10

R 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] 15
challenge icon

Aufgabe

Einfach

Vervollständige die Liste ops mit drei anonymen Funktionen mit jeweils einem Argument:

  • double gibt das Argument multipliziert mit 2 zurück
  • square gibt das Argument multipliziert mit sich selbst zurück
  • negate gibt 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")
quiz iconTeste dich selbst

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

Übe selbstständig: Online-R-Compiler