Треки
/
R
R
/
Вправи
/
Спостерігач за птахами
Спостерігач за птахами

Спостерігач за птахами

Навчальна вправа

Вступ

Це важливе поняття в R. Щоб краще зрозуміти ці варіанти, корисно поглянути на розмірність вхідних і вихідних даних різних функцій.

На вході вектор, на виході скаляр

Ми вже бачили функції, які приймають вектор і повертають одне скалярне значення:

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

До цієї категорії належить і багато статистичних функцій, як-от mean().

Для логічних векторів є all() і any().

На вході вектор, на виході вектор

Багато функцій в R працюють з цілими векторами й часто повертають вектор. Це стосується більшості математичних функцій:

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

Це не лише стисло і зручно, адже не потрібні цикли, спискові включення чи рекурсія, поширені в інших мовах. В R векторні функції часто працюють значно швидше, ніж ці прийоми.

Для сортування вектора є sort(), яка повертає значення, і order(), яка повертає індекси:

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

Типово сортування відбувається за зростанням. Якщо потрібно, вкажімо decreasing = TRUE або скористаймося rev(), щоб обернути наявний вектор.

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

Є також функції, які створюють кумулятивні вектори, обробляючи вхідний вектор зліва направо:

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

На вході кілька векторів, на виході вектор

Це поняття можна також поширити на порівняння векторів. Наприклад, розгляньмо функцію pmax(), яка знаходить максимум для кожної пари:

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

Вказівки

Ми завзяті спостерігачі за птахами, які ведуть облік того, скільки птахів відвідало наш сад за останні сім днів.

У нас шість завдань, і всі вони стосуються кількості птахів, що відвідали наш сад.

1. Перевірте, скільки птахів відвідало сад сьогодні

Реалізуйте функцію today(), яка повертає кількість птахів, що відвідали наш сад сьогодні. Кількість птахів упорядковано за днями: перший елемент містить кількість за найдавніший день, а останній - сьогоднішню кількість.

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

2. Збільште сьогоднішню кількість на одиницю

Реалізуйте функцію increment_todays_count(), яка збільшує сьогоднішню кількість на одиницю:

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

3. Перевірте, чи був день без птахів

Реалізуйте функцію has_day_without_birds(), яка повертає TRUE, якщо був день, коли жоден птах не відвідав наш сад; інакше повертає FALSE:

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

4. Обчисліть кількість птахів, що відвідали сад, за вказану кількість днів від початку тижня

Реалізуйте функцію count_for_first_days(), яка повертає кількість птахів, що відвідали наш сад від початку тижня, але обмежує підрахунок указаною кількістю днів від початку тижня.

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

5. Обчисліть кількість жвавих днів

Деякі дні жвавіші за інші. Жвавим вважається день, коли наш сад відвідали пʼять або більше птахів. Реалізуйте функцію busy_days(), яка повертає кількість жвавих днів:

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

6. Обчисліть накопичувальний підсумок відвідувань птахів за останній тиждень

Нам цікаво, скільки всього птахів відвідало сад за цей тиждень. Обчисліть накопичувальні підсумки для кожного дня.

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

7. Відсортуйте назви днів за жвавістю

Ми підозрюємо, що на відвідування птахів впливають закономірності руху на сусідніх дорогах, а отже вихідні відрізняються від буднів.

Відсортуйте скорочені назви днів у спадному порядку за кількістю птахів, що відвідали сад.

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"
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
R Exercism

Час розпочати Спостерігач за птахами?

Зареєструйтеся на Exercism, щоб вивчати й опановувати R, а також 21 концепція111 вправ та справжнє наставництво від людей, і все це безкоштовно.