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.33333Fonctions 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))Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Défi
MoyenCré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 :
- Créez une nouvelle colonne nommée
student_meanqui contient le score moyen. - Créez une nouvelle colonne nommée
is_above_meanqui contient TRUE ou FALSE si l'étudiant est au-dessus ou en dessous de la moyenne. - Créez une colonne nommée
rankqui 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))
- Pour trouver le rang, utilisez
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
1Bases des données
Comprendre les structures de donnéesIndexation de DataframeSélection de sous-ensembles de donnéesConversion des types de donnéesL'opérateur Pipe en R4Manipulation avancée
Manipulation de chaînes de caractèresGestion des dates et des heuresFonctions personnalisées3Remodelage des données
Du format large au format longDu format long au format largeGestion des données manquantes