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 <-:
# 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.
# 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 12Argumente 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ă:
# 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 80Returnarea 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):
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 20Funcț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):
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
Definiți o funcție numită double_value care acceptă un singur argument x și returnează dublu (x * 2) folosind return().
Afișează indiciu
Utilizați sintassi: double_value <- function(x) { return(x * 2) }
Soluție disponibilă după 3 încercări
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().
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
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.
Afișează indiciu
Usa: calculate_tax <- function(amount, rate = 0,22) { return(amount * rate) }
Soluție disponibilă după 3 încercări
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)).
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
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.
Afișează indiciu
Utilizare: tripled <- sapply(v, function(x) x * 3)
Soluție disponibilă după 3 încercări