Aller au contenu principal

Partie 5 : Programmation avancée avec R

Structures de contrôle

Boucles

Afficher les nombres de 1 à 10

for (i in 1:10) {
print(i)
}

Boucle for pour calculer la somme des carrés des nombres de 1 à 5.

somme_carres <- 0
for (i in 1:5) {
somme_carres <- somme_carres + i^2
}
print(somme_carres)

Une boucle for pour trouver la moyenne d'une liste de nombres.

nombres <- c(5, 10, 15, 20, 25)
somme <- 0
for (nombre in nombres) {
somme <- somme + nombre
}
moyenne <- somme / length(nombres)
print(moyenne)

Une boucle for pour créer un vecteur de carrés des nombres de 1 à 10.

carres <- c()
for (i in 1:10) {
carres <- c(carres, i^2)
}
print(carres)

Une boucle while pour afficher les carrés des nombres de 1 à 5.

i <- 1
while (i <= 5) {
print(i^2)
i <- i + 1
}

Conditions

Une structure if pour déterminer si un nombre est pair ou impair.

nombre <- 10

if (nombre %% 2 == 0) {
print("Le nombre est pair.")
} else {
print("Le nombre est impair.")
}

Une structure if-else pour déterminer la catégorie d'âge en fonction de l'âge fourni.

age <- 25

if (age < 18) {
cat("Mineur")
} else if (age >= 18 && age < 65) {
cat("Adulte")
} else {
cat("Senior")
}

Fonctions

Une fonction pour calculer la somme de deux nombres.

addition <- function(a, b) {
return(a + b)
}

resultat <- addition(3, 5)
print(resultat)

Une fonction pour calculer la moyenne d'une liste de nombres.

moyenne <- function(nombres) {
return(mean(nombres))
}

liste_nombres <- c(10, 20, 30, 40, 50)
resultat <- moyenne(liste_nombres)
print(resultat)

Une fonction pour déterminer si un nombre est pair ou impair.

parite <- function(nombre) {
if (nombre %% 2 == 0) {
return("Pair")
} else {
return("Impair")
}
}

resultat <- parite(7)
print(resultat)

Une fonction pour calculer la factorielle d'un nombre.

factorielle <- function(n) {
if (n == 0) {
return(1)
} else {
return(n * factorielle(n - 1))
}
}

resultat <- factorielle(5)
print(resultat)

Une fonction pour inverser une chaîne de caractères.

inverser_chaine <- function(chaine) {
return(paste0(rev(strsplit(chaine, "")[[1]]), collapse = ""))
}

resultat <- inverser_chaine("hello")
print(resultat)

exercice : creez deux fonctions. L'une aura pour but de normaliser et l'autre de standardiser les données

Min-max normalization

normalize <- function(x) {
return((x - min(x)) / (max(x) - min(x)))
}

df_normalized <- as.data.frame(lapply(df, normalize))

Standardization

standardize <- function(x) {
return((x - mean(x)) / sd(x))
}

df_standardized <- as.data.frame(lapply(df, standardize))

Programmation fonctionnelle avec purrr

map() pour appliquer une fonction à chaque élément d'un vecteur.

library(purrr)

Créer un vecteur

vecteur <- c(1, 2, 3, 4, 5)

Ajouter 1 à chaque élément du vecteur

resultat <- map(vecteur, ~ .x + 1)
print(resultat)

map_dbl() pour appliquer une fonction à chaque élément d'un vecteur et obtenir un vecteur numérique en sortie.

Créer un vecteur

vecteur <- c(1, 2, 3, 4, 5)

Calculer le carré de chaque élément du vecteur

resultat <- map_dbl(vecteur, ~ .x^2)
print(resultat)

map_df() pour appliquer une fonction à chaque élément d'une liste et obtenir un dataframe en sortie.

Créer une liste de vecteurs

liste <- list(vecteur1 = c(1, 2, 3), vecteur2 = c(4, 5, 6))

Calculer la moyenne de chaque vecteur et créer un dataframe

resultat <- map_df(liste, ~ tibble(moyenne = mean(.x)))
print(resultat)

reduce() pour réduire une liste en un seul résultat en appliquant une fonction d'accumulation. Créer une liste de nombres

liste <- list(1, 2, 3, 4, 5)

Calculer la somme des nombres dans la liste

resultat <- reduce(liste, `+`)
print(resultat)

pmap() pour appliquer une fonction à plusieurs arguments sur chaque élément d'une liste.

Créer une liste de vecteurs

liste <- list(c(1, 2, 3), c(4, 5, 6), c(7, 8, 9))

Ajouter les éléments correspondants des vecteurs

resultat <- pmap(liste, ~ sum(c(...)))
print(resultat)

Création de packages R

Exercice : Créez un package R appelé monpackage contenant une fonction nommée carre() qui prend un nombre comme argument et renvoie son carré.

Solution :

  1. Créez un nouveau répertoire nommé monpackage.

  2. À l'intérieur de ce répertoire, créez un fichier R nommé carre.R dans le répertoire R/.

carre <- function(x) {
return(x^2)
}
  1. Dans le même répertoire, créez un fichier DESCRIPTION avec les métadonnées de votre package :
ChampExemple de valeur
Packagemonpackage
TypePackage
TitleUne démo de package R
Version0.1.0
AuthorVotre nom
MaintainerVotre nom <votre@email.com>
DescriptionUn package R simple pour calculer le carré d'un nombre.
LicenseMIT + file LICENSE
EncodingUTF-8
LazyDatatrue
  1. Créez un fichier NAMESPACE avec la directive d'exportation pour rendre la fonction carre() accessible :
export(carre)
  1. Enfin, exécutez roxygen2::roxygenize() pour générer la documentation à partir des commentaires roxygen2.

  2. Vous pouvez maintenant construire et installer votre package avec devtools :

devtools::build()
devtools::install()
  1. Une fois cela fait, vous pouvez utiliser votre package en l'important avec library(monpackage) et en appelant la fonction carre()
library(monpackage)
carre(3)