Tracks
/
R
R
/
Übungen
/
Vogelbeobachter
Vogelbeobachter

Vogelbeobachter

Lernübung

Einführung

Das ist ein wichtiges Konzept in R. Um die Möglichkeiten besser zu verstehen, kann es hilfreich sein, die Dimensionalität der Eingabe und Ausgabe der verschiedenen Funktionen zu betrachten.

Vektor rein, Skalar raus

Wir haben bereits Funktionen gesehen, die einen Vektor entgegennehmen und einen einzelnen, skalarähnlichen Wert zurückgeben:

> v <- 1:5
> length(v)
#> [1] 5
> sum(v)
#> [1] 15

Viele statistische Funktionen gehören ebenfalls in diese Kategorie, wie zum Beispiel mean().

Für logische Vektoren gibt es all() und any().

Vektor rein, Vektor raus

Viele Funktionen in R arbeiten mit ganzen Vektoren und liefern oft eine Vektorausgabe. Dazu gehören die meisten mathematischen Funktionen:

> sq <- c(4, 9, 16, 25)
> sqrt(sq) # square root
#> [1] 2 3 4 5

Das ist nicht nur prägnant und praktisch, sondern vermeidet auch die Notwendigkeit von Schleifen, List Comprehensions oder Rekursion, die in anderen Sprachen üblich sind. In R laufen Vektorfunktionen oft viel schneller als diese Techniken.

Zum Sortieren eines Vektors gibt es sort(), um die Werte zurückzugeben, und order(), um die Indizes zurückzugeben:

> v <- c("I", "am", "not", "in", "order")
> sort(v)
#> [1] "am"    "I"     "in"    "not"   "order"
> order(v)
#> [1] 2 1 4 3 5

Standardmäßig wird aufsteigend sortiert. Gib bei Bedarf decreasing = TRUE an, oder verwende rev(), um einen vorhandenen Vektor umzukehren.

v <- c("I", "am", "not", "in", "order")
sort(v, decreasing = TRUE)
#> [1] "order" "not"   "in"    "I"     "am"

rev(1:4)
#> [1] 4 3 2 1

Es gibt auch Funktionen, die kumulative Vektorausgaben erzeugen und den Eingabevektor von links nach rechts verarbeiten:

> cumsum(1:5)
#> [1]  1  3  6 10 15  # sums
> cumprod(1:5)
#> [1]   1   2   6  24 120 # equivalent to factorials

Mehrere Vektoren rein, Vektor raus

Eine Erweiterung dieses Konzepts kann auch verwendet werden, um Vektoren zu vergleichen. Betrachte zum Beispiel die Funktion pmax() für paarweise Maxima:

> v
#> [1] 2 7 9
> w
#> [1] 3 1 5
> pmax(v, w)
#> [1] 3 7 9 # max of each pairwise comparison

Anleitung

Du beobachtest leidenschaftlich gern Vögel und hältst fest, wie viele Vögel in den letzten sieben Tagen deinen Garten besucht haben.

Du hast sechs Aufgaben, die sich alle mit der Anzahl der Vögel befassen, die deinen Garten besucht haben.

1. Prüfe, wie viele Vögel heute zu Besuch waren

Implementiere die Funktion today(), die zurückgibt, wie viele Vögel deinen Garten heute besucht haben. Die Vogelzahlen sind nach Tagen geordnet: Das erste Element ist die Zahl des ältesten Tages, das letzte Element die Zahl von heute.

birds_per_day <- c(2, 5, 0, 7, 4, 1)
today(birds_per_day)
# => 1

2. Erhöhe die heutige Anzahl

Implementiere die Funktion increment_todays_count(), um die Anzahl für heute zu erhöhen:

birds_per_day <- c(2, 5, 0, 7, 4, 1)
increment_todays_count(birds_per_day)
# => c(2, 5, 0, 7, 4, 2)

3. Prüfe, ob es einen Tag ohne Vogelbesuch gab

Implementiere die Funktion has_day_without_birds(), die TRUE zurückgibt, wenn es einen Tag gab, an dem kein Vogel den Garten besucht hat; andernfalls gibst du FALSE zurück:

birds_per_day <- c(2, 5, 0, 7, 4, 1)
has_day_without_birds(birds_per_day)
# => true

4. Berechne die Anzahl der Vögel für die ersten Tage

Implementiere die Funktion count_for_first_days(), die die Anzahl der Vögel zurückgibt, die seit Beginn der Woche deinen Garten besucht haben. Beschränke die Zählung dabei auf die angegebene Anzahl von Tagen ab Beginn der Woche.

birds_per_day <- c(2, 5, 0, 7, 4, 1)
count_for_first_days(birds_per_day, 4)
# => 14

5. Berechne die Anzahl der geschäftigen Tage

Manche Tage sind geschäftiger als andere. Ein geschäftiger Tag ist einer, an dem fünf oder mehr Vögel deinen Garten besucht haben. Implementiere die Funktion busy_days(), die die Anzahl der geschäftigen Tage zurückgibt:

birds_per_day <- c(2, 5, 0, 7, 4, 1)
busy_days(birds_per_day)
# => 2

6. Berechne die laufende Gesamtzahl der Vogelbesuche der letzten Woche

Du bist neugierig, wie viele Vögel diese Woche insgesamt schon zu Besuch waren. Berechne die kumulierten Summen für jeden Tag.

running_total(c(7, 6, 5, 4, 3, 2, 1))
#> [1]  7 13 18 22 25 27 28

7. Sortiere die Tagesnamen danach, wie geschäftig sie waren

Du vermutest, dass die Vogelbesuche vom Verkehrsaufkommen der umliegenden Straßen beeinflusst werden und deshalb am Wochenende anders ausfallen als an Wochentagen.

Sortiere die Tagesabkürzungen in absteigender Reihenfolge nach der Anzahl der Vögel, die zu Besuch waren.

day_names <- c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
birds_per_day <- c(5, 2, 4, 6, 0, 9, 8)
busy_days_of_week(birds_per_day, day_names)
#> [1] "Sat" "Sun" "Thu" "Mon" "Wed" "Tue" "Fri"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
R Exercism

Bereit, mit Vogelbeobachter zu starten?

Melde dich bei Exercism an, um R mit 21 Konzepte111 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.