Модульні уроки (1/2)
Функції письма
У R функції є громадянами першого класу (власними об’єктами) і дозволяють структурувати ваш код у модульні, багаторазово використовувані та добре організовані блоки.
Визначення функції
Щоб визначити функцію, використовуйте ключове слово function та призначте створений об’єкт змінній (ім’я функції) за допомогою оператора присвоєння <-:
# Simple function definition
greet_user <- function() {
print("Hello, User!")
}
# Invoking the function
greet_user()Параметри та значення, що повертаються
Функції можуть приймати один або кілька параметрів. Щоб явно повернути значення, скористайтеся функцією return(). Якщо return() опущено, R автоматично поверне значення останнього обчисленого виразу в тілі функції.
# Function that adds two numbers and returns the result
add_numbers <- function(a, b) {
sum_result <- a + b
return(sum_result)
}
total <- add_numbers(5, 7)
print(total) # Prints 12Аргументи за замовчуванням
Ви можете вказати значення за замовчуванням для параметрів функції. Якщо аргумент не надається під час виклику функції, R використовуватиме значення за замовчуванням:
# The function uses a default discount rate of 10% (0.10)
apply_discount <- function(price, discount = 0.10) {
discounted_price <- price * (1 - discount)
return(discounted_price)
}
# Uses the default (10%)
print(apply_discount(100)) # Prints 90
# Specifies a custom discount (20%)
print(apply_discount(100, 0.20)) # Prints 80Повернення кількох значень зі списками
Оскільки функція в R може повертати лише один об’єкт безпосередньо через return(), якщо нам потрібно повернути кілька значень (можливо, різних типів або довжини), ми можемо об’єднати їх у список (list):
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) # Prints 20Анонімні функції та sapply
Анонімні функції (функції без імені, визначеного в рядку) надзвичайно корисні в парі з такими функціями, як sapply(), для застосування швидких трансформацій до елементів вектора або списку.
У сучасному R (починаючи з версії 4.1.0) ви можете визначати анонімні функції за допомогою скороченого синтаксису \(x) на додаток до класичного function(x):
v <- c(1, 2, 3)
# Using sapply with a classic anonymous function
sapply(v, function(x) x^2) # 1 4 9
# Using sapply with shorthand syntax (R >= 4.1.0)
sapply(v, \(x) x^2) # 1 4 9Спробуйте самі
Визначте функцію з назвою double_value, яка приймає один аргумент x і повертає його double (x * 2) за допомогою return().
Показати підказку
Використання синтасії: подвійне_значення <- функція(x) { return(x * 2) }
Рішення доступне після 3 спроб
Визначте функцію з назвоюcalculate_area, яка приймає два аргументи: ширину та висоту. Функція повинна повернути свій продукт за допомогою return().
Показати підказку
Визначте функцію з параметрами ширина та висота та поверніть ширину * висоту.
Рішення доступне після 3 спроб
Визначте функцію з назвою Calculate_tax, яка приймає необхідну суму аргументу та необов’язкову ставку аргументу зі значенням за замовчуванням 0,22. Повернути суму товару * тариф.
Показати підказку
США:calculate_tax <- function(amount, rate = 0.22) { return(amount * rate)}
Рішення доступне після 3 спроб
Визначте функцію analy_vector, яка приймає вектор v. Функція має повертати список, що містить два елементи з іменами sum (сума вектора, обчислена за допомогою sum(v)) і len (довжина вектора, обчислена за допомогою length(v)).
Показати підказку
Використовуйте синтаксис: analy_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }
Рішення доступне після 3 спроб
Маючи вектор v, використовуйте функцію sapply() з анонімною функцією, щоб потроїти значення кожного елемента (помноживши його на 3). Збережіть результат у змінній tripled.
Показати підказку
Використання: потроєний <- sapply(v, функція(x) x * 3)
Рішення доступне після 3 спроб