[1] "this is my first function"
13 Створення функцій
13.1 Понятя функції та синтаксис створення
Усі мови програмування окрім набору вбудованих функцій також дозволяють створювати власні функції, що інколи жє наобхідним для вирішення задачі, а інколи спрощує написаний код та полегшує його тестування.
Усі функції мають кілька спільних характеристик:
- Функція - це блок коду, що виконується при її виклику по імені.
- Функція може приймати аргументи, які використовуються в коді функції.
- Функція може повертати значення, яке може бути використано в коді, де функція була викликана.
Створення фукнцій у R
відбувається з використанням ключового слова function
, а синтаксис має вигляд:
У рядках 1-3 створюється функція my_func
, яка не приймає аргументів, але виконує дію виводу тексту "this is my first function"
на екран. У рядку 5 функція викликається.
Увага. Виконання функції відбувається у момент виклику, а не у момент створення.
У прикладі вище my_func
є імям функції, а my_func()
- її виликом.
13.2 Передача аргументів та повернення значень
Функції також можуть приймати аргументи. Ви можете додати стільки аргументів, скільки вам потрібно, розділяючи їх комами.
Наприклад, створимо функцію для конвретації валюти з гривні у долари:
uah_to_usd <- function(uah) {
usd_rate <- 40
usd_amount <- uah / usd_rate
print(usd_amount)
}
uah_to_usd(200)
[1] 5
У прикладі вище ми вивели значення прямо з функції, проте частіше виникає потреба повернути значення з функції, щоб використати його далі. Для цього використовується ключове слово return
. Перепишемо нашу функцію:
uah_to_usd <- function(uah) {
usd_rate <- 40
usd_amount <- uah / usd_rate
return(usd_amount)
}
total_usd <- uah_to_usd(200)
print(paste("Total USD:", total_usd))
[1] "Total USD: 5"
Насправді у R
можна не використовувати return
, а просто використовувати останнє значення, яке буде обчислено в функції. Однак, це не є хорошою практикою, оскільки це може призвести до помилок, які важко знайти у коді програми:
13.3 Аргументи функції за замовчуванням
Розширимо нашу попереню функцію та будемо також передавати курс USD/UAH як параметр. Якщо курс не передано, то використовуємо курс за замовчуванням:
Приклади розв’язання завдань
Завдання 1. Середнє значення
Напишіть функцію, що обчислює середнє значення чисел у векторі та повертає його. Точність обчислень - \(2\) знаки після коми.
Примітка. Під час розвязання задачі не можна користуватися жодними готовими вбудованими функціямию
Розв’язання
Завдання 2. Створення вектору із випадковими числами
Написати функцію, що генерує вектор випадкових чисел у вказаному діапазоні. Якщо діапазон користувачем не вказано, то генеруються значення у діапазоні від \(0\) до \(100\). Також варто врахувати, що випадкові числа можуть мати дробову частину. У такому випадку потрібно передати
Розв’язання
randomNumbers <- function(n, min = 0, max = 100, intOnly = TRUE) {
if(intOnly) {
return(sample(min:max, n, replace = TRUE))
} else {
return(runif(n, min, max))
}
}
randomNumbers(10, intOnly = F)
[1] 80.908700 31.384017 91.524648 61.497971 95.721116 76.085918 45.533927
[8] 2.446864 45.324329 14.984744
[1] 100 110 131 144 161 158 200 127 128 183
Завдання 3. Депозитний калькулятор
Напишіть функцію, що обчислює суму депозиту на кінець терміну вкладу. Функція повинна приймати наступні аргументи:
-
P
- сума депозиту у гривні. -
n
- термін депозиту у місяцях. -
r
- щомісячна відсоткова ставка за депозитом - monthly capitaliztion
During caluculations print every month info in style: “Month: 1 / Total: 1010 / 10 EUR” Suppose I deposit 1000 (P) dollars in bank every month for 60 (n) months and bank pays me 1 (rate) percent per month as interest. Hence I can calculate the interest on each deposit as:
\(A = P*(1+\frac{r}{n})^n\)
The formula used is A = P(1+r/n) ^ n, where ‘A’ represents final amount procured, ‘P’ represents principal, ‘r’ represents annual interest rate, ‘n’ represents the number of times that interest has been compounded, ‘t’ represents the tenure.