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:
# 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.
# 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:
# 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:
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:
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
Definiere eine Funktion namens double_value, die ein einzelnes Argument x akzeptiert und dessen doppelten Wert (x * 2) über return() zurückgibt.
Hinweis anzeigen
Verwende die Syntax: double_value <- function(x) { return(x * 2) }
Lösung nach 3 Versuchen verfügbar
Definiere eine Funktion namens calculate_area, die zwei Argumente akzeptiert: width und height. Die Funktion soll deren Produkt über return() zurückgeben.
Hinweis anzeigen
Definiere die Funktion mit den Parametern width und height und gib width * height zurück.
Lösung nach 3 Versuchen verfügbar
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.
Hinweis anzeigen
Verwende: calculate_tax <- function(amount, rate = 0.22) { return(amount * rate) }
Lösung nach 3 Versuchen verfügbar
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)).
Hinweis anzeigen
Verwende die Syntax: analyze_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }
Lösung nach 3 Versuchen verfügbar
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.
Hinweis anzeigen
Verwende: tripled <- sapply(v, function(x) x * 3)
Lösung nach 3 Versuchen verfügbar