Menu
Coddy logo textTech

Fonctions personnalisées

Leçon 14 sur 14 du cours Manipulation de données en R de Coddy.

Les fonctions personnalisées en R sont des outils puissants pour créer du code réutilisable et effectuer des transformations de données complexes. Elles vous permettent d'encapsuler une série d'opérations dans une seule unité appelable. Explorons comment créer et utiliser des fonctions personnalisées pour les tâches de manipulation de données.

Structure de base d'une fonction personnalisée

La syntaxe de base pour créer une fonction personnalisée en R est :

function_name <- function(arg1, arg2, ...) {
  # Function body
  # Operations using arg1, arg2, etc.
  return(result)
}

Création d'une fonction personnalisée simple

Créons une fonction simple qui calcule le pourcentage de valeurs manquantes dans un vecteur :

percent_missing <- function(x) {
  sum(is.na(x)) / length(x) * 100
}

# Usage
data <- c(1, 2, NA, 4, NA, 6)
percent_missing(data)  # Returns: 33.33333

Fonctions avec plusieurs arguments

Les fonctions personnalisées peuvent prendre plusieurs arguments, ce qui permet des opérations plus flexibles :

scale_column <- function(df, column_name, min_val = 0, max_val = 1) {
  df[[column_name]] <- (df[[column_name]] - min(df[[column_name]], na.rm = TRUE)) / 
                       (max(df[[column_name]], na.rm = TRUE) - min(df[[column_name]], na.rm = TRUE))
  df[[column_name]] <- df[[column_name]] * (max_val - min_val) + min_val
  return(df)
}

# Usage
df <- data.frame(x = 1:10, y = 11:20)
scaled_df <- scale_column(df, "x", 0, 100)

Retourner plusieurs valeurs

Les fonctions peuvent retourner plusieurs valeurs en utilisant une liste :

summarize_numeric <- function(x) {
  list(
    mean = mean(x, na.rm = TRUE),
    median = median(x, na.rm = TRUE),
    sd = sd(x, na.rm = TRUE)
  )
}

# Usage
numbers <- c(1, 2, 3, 4, 5)
summary_stats <- summarize_numeric(numbers)

Utilisation de fonctions personnalisées avec dplyr

Les fonctions personnalisées peuvent être particulièrement utiles lorsqu'elles sont combinées avec dplyr pour la manipulation de données :

library(dplyr)

categorize_age <- function(age) {
  case_when(
    age < 18 ~ "Child",
    age < 65 ~ "Adult",
    TRUE ~ "Senior"
  )
}

# Usage with dplyr
df <- data.frame(name = c("Alice", "Bob", "Charlie"), age = c(25, 72, 16))
df %>%
  mutate(age_category = categorize_age(age))
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

challenge icon

Défi

Moyen

Créez une fonction personnalisée nommée mean_score qui calcule le score moyen pour chaque étudiant sur un ensemble de données de scores d'examen.

Pour calculer le score moyen sur chaque ligne, nous utiliserons la fonction rowwise() et plus tard nous utiliserons ungroup() pour tout remettre en l'état. Consultez le code fourni.

Effectuez les actions suivantes :

  1. Créez une nouvelle colonne nommée student_mean qui contient le score moyen.
  2. Créez une nouvelle colonne nommée is_above_mean qui contient TRUE ou FALSE si l'étudiant est au-dessus ou en dessous de la moyenne.
  3. Créez une colonne nommée rank qui contient le rang de chaque étudiant par rapport aux autres en fonction de leur moyenne. Par exemple, 1 signifie que l'étudiant est le meilleur, 2 signifie que l'étudiant est le deuxième meilleur, etc.
    • Pour trouver le rang, utilisez order() : order(order(mean_col, decreasing = TRUE))

Essayez vous-même

# Lire l'entrée
con <- file("stdin", "r")
input_data <- readLines(con)
close(con)

# Traiter les données d'entrée dans un data frame
data <- read.csv(text = input_data, header = TRUE, stringsAsFactors = FALSE)

# Définir la fonction mean_score
mean_score <- function(data) {
  # TODO: Écrivez votre code ici
  # calculer la moyenne de toutes les matières

  return(result)
}

# TODO: Écrivez votre code ici
# Créer une nouvelle colonne nommée student_mean qui contient la note moyenne.
# Créer une nouvelle colonne nommée is_above_mean qui contient TRUE ou FALSE si l'étudiant est au-dessus ou en dessous de la moyenne.
# Créer une colonne nommée rank qui contient le rang de chaque étudiant par rapport aux autres en fonction de leur moyenne. Par exemple, 1 signifie que l'étudiant est le meilleur, 2 signifie que l'étudiant est le deuxième meilleur, etc.

# Afficher le résultat
print(data)

Toutes les leçons de Manipulation de données en R