Salt la conținutul principal
Modulul 3 · Lecția 1 din 25/10 în curs~12 min
Lecții din modul (1/2)

Funcții de scriere

În R, funcțiile sunt cetățeni de primă clasă (obiecte în sine) și vă permit să vă structurați codul în blocuri modulare, reutilizabile și bine organizate.

Definirea unei funcții

Pentru a defini o funcție, utilizați cuvântul cheie function și atribuiți obiectul creat unei variabile (numele funcției) folosind operatorul de atribuire <-:

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

# Invoking the function
greet_user()

Parametri și valori returnate

Funcțiile pot accepta unul sau mai mulți parametri. Pentru a returna în mod explicit o valoare, utilizați funcția return(). Dacă return() este omis, R va returna automat valoarea ultimei expresii evaluate din corpul funcției.

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

Argumente implicite

Puteți specifica valori implicite pentru parametrii unei funcții. Dacă argumentul nu este furnizat atunci când funcția este invocată, R va folosi valoarea implicită:

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

Returnarea mai multor valori cu liste

Deoarece o funcție din R poate returna doar un singur obiect direct prin return(), dacă trebuie să returnăm mai multe valori (eventual de diferite tipuri sau lungimi), le putem grupa într-o listă (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

Funcții anonime și sapply

Funcțiile anonime (funcții fără un nume definit în linie) sunt extrem de utile atunci când sunt asociate cu funcții precum sapply() pentru a aplica transformări rapide asupra elementelor unui vector sau a unei liste.

În R modern (de la versiunea 4.1.0 în sus), puteți defini funcții anonime folosind sintaxa prescurtată \(x) în plus față de clasica 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

Încercați-l singur

Exercițiu#r.m3.l1.e1
Încercări: 0Se încarcă…

Definiți o funcție numită double_value care acceptă un singur argument x și returnează dublu (x * 2) folosind return().

Se încarcă editorul...
Afișează indiciu

Utilizați sintassi: double_value <- function(x) { return(x * 2) }

Soluție disponibilă după 3 încercări

Exercițiu#r.m3.l1.e2
Încercări: 0Se încarcă…

Definiți o funcție numită calculate_area care acceptă două argumente: lățime și înălțime. Funcția trebuie să returneze produsul folosind return().

Se încarcă editorul...
Afișează indiciu

Definiți funcția cu parametrii lățime și înălțime și returnați lățime * înălțime.

Soluție disponibilă după 3 încercări

Exercițiu#r.m3.l1.e3
Încercări: 0Se încarcă…

Definiți o funcție numită calculate_tax care acceptă o sumă de argument necesară și o rată de argument opțională cu o valoare implicită de 0,22. Returnează valoarea produsului * tarif.

Se încarcă editorul...
Afișează indiciu

Usa: calculate_tax <- function(amount, rate = 0,22) { return(amount * rate) }

Soluție disponibilă după 3 încercări

Exercițiu#r.m3.l1.e4
Încercări: 0Se încarcă…

Definiți o funcție numită analize_vector care acceptă un vector v. Funcția trebuie să returneze o listă care să conțină două elemente numite sum (suma vectorului, calculată cu sum(v)) și len (lungimea vectorului, calculată cu lungimea(v)).

Se încarcă editorul...
Afișează indiciu

Utilizați sintaxa: vector_analize <- function(v) { return(list(suma = suma(v), len = lungime(v))) }

Soluție disponibilă după 3 încercări

Exercițiu#r.m3.l1.e5
Încercări: 0Se încarcă…

Având în vedere vectorul v, utilizați funcția sapply() cu o funcție anonimă pentru a tripla valoarea fiecărui element (înmulțind-o cu 3). Salvați rezultatul în variabila triplat.

Se încarcă editorul...
Afișează indiciu

Utilizare: tripled <- sapply(v, function(x) x * 3)

Soluție disponibilă după 3 încercări