Перейти до основного вмісту
Модуль 3 · Урок 1 із 25/10 у курсі~12 min
Модульні уроки (1/2)

Функції письма

У R функції є громадянами першого класу (власними об’єктами) і дозволяють структурувати ваш код у модульні, багаторазово використовувані та добре організовані блоки.

Визначення функції

Щоб визначити функцію, використовуйте ключове слово function та призначте створений об’єкт змінній (ім’я функції) за допомогою оператора присвоєння <-:

R
# Simple function definition
greet_user <- function() {
  print("Hello, User!")
}

# Invoking the function
greet_user()

Параметри та значення, що повертаються

Функції можуть приймати один або кілька параметрів. Щоб явно повернути значення, скористайтеся функцією return(). Якщо return() опущено, R автоматично поверне значення останнього обчисленого виразу в тілі функції.

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 використовуватиме значення за замовчуванням:

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):

R
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):

R
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

Спробуйте самі

вправи#r.m3.l1.e1
Спроби: 0Завантаження…

Визначте функцію з назвою double_value, яка приймає один аргумент x і повертає його double (x * 2) за допомогою return().

Завантаження редактора…
Показати підказку

Використання синтасії: подвійне_значення <- функція(x) { return(x * 2) }

Рішення доступне після 3 спроб

вправи#r.m3.l1.e2
Спроби: 0Завантаження…

Визначте функцію з назвоюcalculate_area, яка приймає два аргументи: ширину та висоту. Функція повинна повернути свій продукт за допомогою return().

Завантаження редактора…
Показати підказку

Визначте функцію з параметрами ширина та висота та поверніть ширину * висоту.

Рішення доступне після 3 спроб

вправи#r.m3.l1.e3
Спроби: 0Завантаження…

Визначте функцію з назвою Calculate_tax, яка приймає необхідну суму аргументу та необов’язкову ставку аргументу зі значенням за замовчуванням 0,22. Повернути суму товару * тариф.

Завантаження редактора…
Показати підказку

США:calculate_tax <- function(amount, rate = 0.22) { return(amount * rate)}

Рішення доступне після 3 спроб

вправи#r.m3.l1.e4
Спроби: 0Завантаження…

Визначте функцію analy_vector, яка приймає вектор v. Функція має повертати список, що містить два елементи з іменами sum (сума вектора, обчислена за допомогою sum(v)) і len (довжина вектора, обчислена за допомогою length(v)).

Завантаження редактора…
Показати підказку

Використовуйте синтаксис: analy_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }

Рішення доступне після 3 спроб

вправи#r.m3.l1.e5
Спроби: 0Завантаження…

Маючи вектор v, використовуйте функцію sapply() з анонімною функцією, щоб потроїти значення кожного елемента (помноживши його на 3). Збережіть результат у змінній tripled.

Завантаження редактора…
Показати підказку

Використання: потроєний <- sapply(v, функція(x) x * 3)

Рішення доступне після 3 спроб