Passer au contenu principal
eLearner.app
Module 3 · Leçon 1 sur 25/10 dans le cours~12 min
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 <- :

Code
# 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.

Code
# 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 :

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

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

Code
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

Exercice#r.m3.l1.e1
Tentatives : 0Chargement…

Définissez une fonction nommée double_value qui accepte un seul argument x et renvoie son double (x * 2) via return().

Chargement de l'éditeur…
Afficher l'indice

Utilisez la syntaxe : double_value <- function(x) { return(x * 2) }

Solution disponible après 3 tentatives

Exercice#r.m3.l1.e2
Tentatives : 0Chargement…

Définissez une fonction nommée calculate_area qui accepte deux arguments : width et height. La fonction doit renvoyer leur produit via return().

Chargement de l'éditeur…
Afficher l'indice

Définissez la fonction avec les paramètres width et height, et renvoyez width * height.

Solution disponible après 3 tentatives

Exercice#r.m3.l1.e3
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Exercice#r.m3.l1.e4
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

Utilisez la syntaxe : analyze_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }

Solution disponible après 3 tentatives

Exercice#r.m3.l1.e5
Tentatives : 0Chargement…

É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.

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives