Direkt zum Hauptinhalt springen
eLearner.app
Modul 3 · Lektion 1 von 25/10 im Kurs~12 min
Lektionen des Moduls (1/2)

Funktionen schreiben

In R sind Funktionen vollwertige Objekte (First-Class Citizens) und ermöglichen es, den Code in modulare, wiederverwendbare und gut organisierte Blöcke zu strukturieren.

Definition einer Funktion

Um eine Funktion zu definieren, verwendet man das Schlüsselwort function und weist das erstellte Objekt einer Variable (dem Funktionsnamen) über den Zuweisungsoperator <- zu:

Code
# Definition einer einfachen Funktion
greet_user <- function() {
  print("Hello, User!")
}

# Aufruf der Funktion
greet_user()

Parameter und Rückgabewerte

Funktionen können einen oder mehrere Parameter akzeptieren. Um explizit einen Wert zurückzugeben, wird die Funktion return() verwendet. Wenn return() weggelassen wird, gibt R automatisch den Wert des letzten im Funktionskörper ausgewerteten Ausdrucks zurück.

Code
# Funktion, die zwei Zahlen addiert und das Ergebnis zurückgibt
add_numbers <- function(a, b) {
  sum_result <- a + b
  return(sum_result)
}

total <- add_numbers(5, 7)
print(total) # Gibt 12 aus

Standardargumente (Default)

Es ist möglich, Standardwerte für die Parameter einer Funktion anzugeben. Wenn das Argument beim Aufruf nicht angegeben wird, verwendet R den Standardwert:

Code
# Die Funktion verwendet einen Standardrabatt von 10% (0.10)
apply_discount <- function(price, discount = 0.10) {
  discounted_price <- price * (1 - discount)
  return(discounted_price)
}

# Verwendet den Standardwert (10%)
print(apply_discount(100)) # Gibt 90 aus

# Gibt einen benutzerdefinierten Rabatt an (20%)
print(apply_discount(100, 0.20)) # Gibt 80 aus

Mehrere Werte mit Listen zurückgeben

Da eine Funktion in R über return() direkt nur ein einzelnes Objekt zurückgeben kann, können wir, wenn wir mehrere Werte zurückgeben müssen (evtl. mit unterschiedlichem Typ oder unterschiedlicher Länge), diese in einer Liste (list) zusammenfassen:

Code
get_stats <- function(v) {
  stats <- list(
    mean_val = mean(v),
    max_val = max(v)
  )
  return(stats)
}

results <- get_stats(c(10, 20, 30))
print(results$mean_val) # Gibt 20 aus

Anonyme Funktionen und sapply

Anonyme Funktionen (d. h. namenlose Funktionen, die direkt definiert werden) sind äußerst nützlich, wenn sie mit Funktionen wie sapply() kombiniert werden, um schnelle Transformationen auf Elemente eines Vektors oder einer Liste anzuwenden.

Im modernen R (ab Version 4.1.0) können anonyme Funktionen neben der klassischen Syntax function(x) auch mit der Kurzschreibweise \(x) definiert werden:

Code
v <- c(1, 2, 3)

# Verwendung von sapply mit klassischer anonymen Funktion
sapply(v, function(x) x^2) # 1 4 9

# Verwendung von sapply mit Kurzschreibweise (R >= 4.1.0)
sapply(v, \(x) x^2) # 1 4 9

Probier es aus

Übung#r.m3.l1.e1
Versuche: 0Wird geladen…

Definiere eine Funktion namens double_value, die ein einzelnes Argument x akzeptiert und dessen doppelten Wert (x * 2) über return() zurückgibt.

Editor wird geladen…
Hinweis anzeigen

Verwende die Syntax: double_value <- function(x) { return(x * 2) }

Lösung nach 3 Versuchen verfügbar

Übung#r.m3.l1.e2
Versuche: 0Wird geladen…

Definiere eine Funktion namens calculate_area, die zwei Argumente akzeptiert: width und height. Die Funktion soll deren Produkt über return() zurückgeben.

Editor wird geladen…
Hinweis anzeigen

Definiere die Funktion mit den Parametern width und height und gib width * height zurück.

Lösung nach 3 Versuchen verfügbar

Übung#r.m3.l1.e3
Versuche: 0Wird geladen…

Definiere eine Funktion namens calculate_tax, die ein obligatorisches Argument amount und ein optionales Argument rate mit dem Standardwert 0.22 akzeptiert. Gib das Produkt amount * rate zurück.

Editor wird geladen…
Hinweis anzeigen

Verwende: calculate_tax <- function(amount, rate = 0.22) { return(amount * rate) }

Lösung nach 3 Versuchen verfügbar

Übung#r.m3.l1.e4
Versuche: 0Wird geladen…

Definiere eine Funktion namens analyze_vector, die einen Vektor v akzeptiert. Die Funktion soll eine Liste zurückgeben, die zwei Elemente enthält: sum (die Summe des Vektors, berechnet mit sum(v)) und len (die Länge des Vektors, berechnet mit length(v)).

Editor wird geladen…
Hinweis anzeigen

Verwende die Syntax: analyze_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }

Lösung nach 3 Versuchen verfügbar

Übung#r.m3.l1.e5
Versuche: 0Wird geladen…

Verwende für den gegebenen Vektor v die Funktion sapply() mit einer anonymen Funktion, um den Wert jedes Elements zu verdreifachen (durch Multiplikation mit 3). Speichere das Ergebnis in der Variable tripled.

Editor wird geladen…
Hinweis anzeigen

Verwende: tripled <- sapply(v, function(x) x * 3)

Lösung nach 3 Versuchen verfügbar