Exercice  : un moyen plus rapide de faire des boucles en R !

1. Créer une matrice matrice contenant des valeurs tirées aléatoirement de dimension 10 lignes x 10
colonnes et dont les éléments suivent une loi normale de moyenne nulle et de variance 2.32.
2. Afficher nombre d’éléments positifs et négatifs de la matrice. Remplacer les nombre négatifs par 0.
3. Afficher les marges de matrice (sommes des valeurs en lignes et en colonnes). Indice : apply, sum
4. Afficher la moyenne des lignes et des colonnes de la matrice.
5. Un autre moyen d’afficher rapidemment la somme/moyenne des lignes/colonnes d’une matrice, est
d’utiliser des fonctions R pré-existantes : rowSums, colSums, rowMeans, colMeans.
#1
matrice = matrix(rnorm(n=100, mean = 0, sd = 2.32),nrow = 10, ncol=10)
#2
nbPos = length(which(matrice > 0))
idxNeg = which(matrice < 0)
nbNeg = length(idxNeg)
matrice[idxNeg] = 0
#3
apply(matrice, 1, sum)
apply(matrice, 2, sum)
#4
apply(matrice, 1, mean)
apply(matrice, 1, mean)
#5
rowSums(matrice); colSums(matrice)
rowMeans(matrice); colMeans(matrice)


Créer et utiliser ses propres fonctions R

Exercice  : notre première fonctio

1. Exécutez les commandes data(iris) puis str(iris). Nous venons de charger en mémoire l’un des
nombreux jeux de données distribués avec R ! Profitez de l’aide sur ce jeu de données pour en apprendre
un peu plus sur les fleurs (?iris) ! Tous les jeux de données disponibles avec l’installation de base de
R sont accessibles en tapant data().
2. Créez la fonction moyenneET suivante et décryptez la :
moyenneET = function(i) c(moy = mean(iris[,i]), et = sd(iris[,i]) )
3. Afficher l’aide de la fonction apply. En utilisant cette fonction, calculez la moyenne et l’écart type des
colonnes numériques du dataset iris. Comparer le résultat avec celui obtenu par la foncion moyenneET.

Remarque :

 pour exécuter plusieurs commandes au sein d’une même fonction, il faut utiliser des accolades

{...}.
#1
data(iris)
str(iris)
moyenneET(2)
#2
moyenneET <- function(i) {
moy = mean(iris[,i])
et = sd(iris[,i])
return( c(moy = moy, et = et) )
}
#3
?apply
moy = apply(iris[,c(1,2,3,4)], 2, mean)
et = apply(iris[,c(1,2,3,4)], 2, sd)
moyenneET(1)
moyenneET(2)
moyenneET(3)

moyenneET(4)

Exercice : une autre fonction toute simple

Créer une fonction nommée somme qui calcule la somme de deux variables x et y passées en arguments.
somme = function(x, y){
resultat = x+y
return(resultat)
}

Exercice * : Nombre mystère

1. Choisir un nombre mystère entre 1 et 100, et le stocker dans un objet que l’on nommera nombre_mystere.
Ensuite, créer une boucle qui à chaque itération effectue un tirage aléatoire d’un entier compris entre 1
et 100. Tant que le nombre tiré est différent du nombre mystère, la boucle doit continuer. A la sortie
de la boucle, une variable que l’on appellera nb_tirages contiendra le nombre de tirages réalisés pour
obtenir le nombre mystère.
2. Utiliser le code de la question précédente pour réaliser la fonction trouver_nombre, qui, lorsqu’on lui
donne un nombre compris entre 1 et 100, retourne le nombre de tirages aléatoires d’entiers compris
entre 1 et 100 nécessaires avant de tirer le nombre mystère.
3. En utilisant une boucle for, faire appel 1000 fois à la fonction trouver_nombre() qui vient d’être créée.
A chaque itération, stocker le résultat dans un élément d’un vecteur que l’on appellera nb_essais_rep.
Enfin, afficher la moyenne du nombre de tirages nécessaires pour retrouver le nombre magique.
Indice : sample, while
10
# 1
nombre_mystere = 59
s = 0
nb_tirages = 0
while (s != nombre_mystere){
s = sample(1:100, 1)
nb_tirages = nb_tirages + 1
}
nb_tirages
# 2
trouver_nombre = function(nombre_mystere){
if (nombre_mystere >=1 & nombre_mystere <=100){
s = 0
nb_tirages = 0
while (s != nombre_mystere){
s = sample(1:100, 1)
nb_tirages = nb_tirages + 1
}
nb_tirages
}
else{
warning("Votre nombre doit être compris entre 1 et 100")
}
}
#3
nb_essais_rep = c()
for (i in seq(1000)){
tmp = trouver_nombre(39)
nb_essais_rep = c(nb_essais_rep, tmp)
}
mean(tmp)

Exercice  : Création d’une fonction, traitement de chaines de

caractères

Supposons que les adresses e-mails des étudiants de centralsupelec soient constituées de la manière suivante: le
prénom et le nom de famille séparés par un point, le symbole arobase et enfin le nom de domaine. Supposons
de plus que les étudiants ont un seul prénom, et aucune particule au nom de famille. La syntaxe des adresses
e-mail est donc comme suit :
nom.prenom@etudiant.centralsupelec.fr.
1. Créer une fonction parseMail, qui à partir d’une adresse e-mail d’un étudiant, retourne un data.frame
contenant trois variables : le prénom, le nom et l’adresse e-mail de cet étudiant.
2. Utiliser cete fonction pour créer un data.frame emails.df à partir du vecteur emails, contenant tous
les prénoms, noms et adresses e-mail des étudiants
indice : strsplit


Modifié le: samedi 21 mai 2022, 22:57