Leçons du module (1/2)
Écrire des Fonctions
En R, les fonctions sont des objets à part entière (first-class citizens) et permettent de structurer le code en blocs modulaires, réutilisables et bien organisés.
Définition d'une Fonction
Pour définir une fonction, on utilise le mot-clé function et on assigne l'objet créé à une variable (le nom de la fonction) via l'opérateur d'affectation <- :
# Définition d'une fonction simple
greet_user <- function() {
print("Hello, User!")
}
# Appel de la fonction
greet_user()
Paramètres et Valeurs de Retour
Les fonctions peuvent accepter un ou plusieurs paramètres. Pour renvoyer explicitement une valeur, on utilise la fonction return(). Si return() est omis, R renverra automatiquement la valeur de la dernière expression évaluée dans le corps de la fonction.
# Fonction qui additionne deux nombres et renvoie le résultat
add_numbers <- function(a, b) {
sum_result <- a + b
return(sum_result)
}
total <- add_numbers(5, 7)
print(total) # Affiche 12
Arguments par Défaut (Default)
Il est possible de spécifier des valeurs par défaut pour les paramètres d'une fonction. Si lors de l'appel l'argument n'est pas fourni, R utilisera la valeur par défaut :
# La fonction utilise un taux de réduction par défaut de 10% (0.10)
apply_discount <- function(price, discount = 0.10) {
discounted_price <- price * (1 - discount)
return(discounted_price)
}
# Utilise la valeur par défaut (10%)
print(apply_discount(100)) # Affiche 90
# Spécifie une réduction personnalisée (20%)
print(apply_discount(100, 0.20)) # Affiche 80
Renvoyer plusieurs valeurs avec les Listes
Puisqu'une fonction en R ne peut renvoyer directement qu'un seul objet via return(), si nous avons besoin de renvoyer plusieurs valeurs (potentiellement de types ou longueurs différents), nous pouvons les regrouper au sein d'une liste (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) # Affiche 20
Fonctions Anonymes et sapply
Les fonctions anonymes (c'est-à-dire les fonctions sans nom définies "à la volée") sont extrêmement utiles lorsqu'elles sont couplées à des fonctions comme sapply() pour appliquer des transformations rapides sur les éléments d'un vecteur ou d'une liste.
En R moderne (à partir de la version 4.1.0), il est possible de définir les fonctions anonymes à l'aide de la syntaxe abrégée \(x) en plus de la classique function(x) :
v <- c(1, 2, 3)
# Utilisation de sapply avec une fonction anonyme classique
sapply(v, function(x) x^2) # 1 4 9
# Utilisation de sapply avec la syntaxe abrégée (R >= 4.1.0)
sapply(v, \(x) x^2) # 1 4 9
À vous de jouer
Définissez une fonction nommée double_value qui accepte un seul argument x et renvoie son double (x * 2) via return().
Afficher l'indice
Utilisez la syntaxe : double_value <- function(x) { return(x * 2) }
Solution disponible après 3 tentatives
Définissez une fonction nommée calculate_area qui accepte deux arguments : width et height. La fonction doit renvoyer leur produit via return().
Afficher l'indice
Définissez la fonction avec les paramètres width et height, et renvoyez width * height.
Solution disponible après 3 tentatives
Définissez une fonction nommée calculate_tax qui accepte un argument obligatoire amount et un argument optionnel rate avec une valeur par défaut de 0.22. Renvoyez le produit amount * rate.
Afficher l'indice
Utilisez : calculate_tax <- function(amount, rate = 0.22) { return(amount * rate) }
Solution disponible après 3 tentatives
Définissez une fonction nommée analyze_vector qui accepte un vecteur v. La fonction doit renvoyer une liste contenant deux éléments nommés sum (la somme du vecteur, calculée avec sum(v)) et len (la longueur du vecteur, calculée avec length(v)).
Afficher l'indice
Utilisez la syntaxe : analyze_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }
Solution disponible après 3 tentatives
Étant donné le vecteur v, utilisez la fonction sapply() avec une fonction anonyme pour tripler la valeur de chaque élément (en le multipliant par 3). Sauvegardez le résultat dans la variable tripled.
Afficher l'indice
Utilisez : tripled <- sapply(v, function(x) x * 3)
Solution disponible après 3 tentatives