Bienvenue
Bienvenue dans R
R est plus facile à utiliser lorsque vous avez bien compris comment fonctionne le langage R. L’objectif de ce module est de vous donnez les clefs de lecture et de compréhension pour interpréter et prévoir les résultats produits par l’exécution de lignes de code R. Vous découvrirez ainsi :
- les fonctions et leurs arguments
- les objets R
- les types de données de base utilisés par R
- les structures de données de base de R, notamment les vecteurs et les listes
- le fonctionnement des packages R
Fonctions
Fonctions
Lancer une fonction
Pouvez-vous utiliser la fonction sqrt() dans le bloc
ci-dessous pour calculer la racine carrée de 961 ?
sqrt(961)
Code
Utilisez le bloc ci-dessous pour examiner le code source de la
fonction sqrt().
sqrt
lm
Comparez le code de la fonction sqrt() au code d’une
autre fonction R, lm(). Examinez le corps de la fonction
lm() dans le bloc ci-dessous.
lm
Pages d’aide
Hou la la ! La fonction lm() exécute beaucoup de code
quand on l’utilise. Mais que fait-elle exactement ? Et surtout
intelligiblement…Pour le découvrir, ouvrez la page d’aide pour
lm() dans le bloc ci-dessous.
?lm
Commentaires dans le code
Selon vous, que va retourner le morceau de code ci-dessous ?
Exécutez-le et voyez par vous-même. Le résultat devrait être… rien ! R
n’exécutera rien sur une ligne précédée du symbole #. C’est
utile pour écrire des commentaires dans le code : placez-les après un
#. Maintenant, supprimez le # et réexécutez le
code. Cette fois-ci, vous devriez voir apparaître le résultat de la
commande.
# sqrt(961)
sqrt(961)
Arguments
Arguments
args()
rnorm() est une fonction qui génère des variables
aléatoires issues d’une loi normale. Exécutez une fonction qui liste les
arguments de cette fonction.
args(rnorm)
Arguments optionnels
rnorm() 1
Utilisez rnorm() pour générer 100 valeurs aléatoires qui
suivent une loi normale de moyenne 100 et d’écart-type 50.
rnorm(100, mean = 100, sd = 50)
rnorm() 2
Pouvez-vous repérer l’erreur dans le code ci-dessous ? Corrigez le code, puis réexécutez-le.
rnorm(100, mu = 100, sd = 50)
# rnorm(100, mean = 100, sd = 50)
Objets
Objets
Noms des objets
Vous pouvez choisir pratiquement n’importe quel nom qui vous fait
plaisir pour désigner un objet R. Une règle bride notre créativité
cependant : le nom ne doit pas commencer par un nombre ou par un
caractère spécial comme +, -, *,
/, ^, !, @, ou
&.
Utilisation des objets
Dans le bloc de code ci-dessous, enregistrez les résultats de
rnorm(100, mean = 100, sd = 15) dans un objet nommé
data. Ensuite, sur une nouvelle ligne, appelez la fonction
hist() sur l’objet data pour tracer un
histogramme des valeurs aléatoires.
data <- rnorm(100, mean = 100, sd = 15)
hist(data)
Et que se passerait-il si… ?
Selon vous, que se passerait-il si vous affectiez data à
un nouvel objet nommé copy ? Exécutez le code ci-dessous,
puis examinez à la fois data et copy.
data <- rnorm(100, mean = 100, sd = 15)
copy <- data
data <- rnorm(100, mean = 100, sd = 15)
copy <- data
data
copy
Jeux de données
Les objets permettent de stocker des ensembles de données dans R. En
fait, R est même livré avec de nombreux jeux de données pré-chargés.
L’un d’entre eux, s’appelle iris : examinez son contenu. Et
aussi, comment selon vous pourriez-vous procéder pour en savoir plus sur
l’objet iris ?
iris
rm()
Malheur ! Et si vous écrasiez accidentellement un objet ? Pas de
panique ! Si cet objet est naturellement fourni dans R ou l’un de ses
packages, vous pouvez restaurer la version d’origine de l’objet en
supprimant votre version avec rm(). Exécutez
rm() sur iris ci-dessous pour restaurer la
version initiale du jeu de données iris.
iris <- 1
iris
iris <- 1
iris
rm(iris)
iris
Vecteurs
Vecteurs
Création d’un vecteur
Dans le bloc ci-dessous, créez un vecteur contenant les entiers de un à dix.
c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
:
Si votre vecteur contient une séquence d’entiers adjacents, vous
pouvez le créer avec le raccourci :. Bien pratique, puisque
cela vous évitera de renseigner les entiers un à un. Exécutez
1:10 dans le bloc ci-dessous. Qu’obtenez-vous ? Alors,
selon vous, qu’est-ce que 1:20 est sensé retourner ?
1:10
[]
Vous pouvez selectionner n’importe quel élément d’un vecteur en
plaçant une paire de crochets à la suite du vecteur. À l’intérieur des
crochets, placez le numéro de l’élément que vous souhaitez extraire. Par
exemple, vec[3] va retourner le troisième élément du
vecteur nommé vec.
Utilisez le bloc ci-dessous pour extraire le quatrième élément de
vec.
vec <- c(1, 2, 4, 8, 16)
vec <- c(1, 2, 4, 8, 16)
vec[4]
Plus de []
Vous pouvez également utiliser les crochets [] pour
selectionner plusieurs éléments d’un vecteur. Placez le vecteur
c(1, 2, 5) entre les crochets ci-dessous. Qu’est-ce que R
retourne ?
vec <- c(1, 2, 4, 8, 16)
vec[]
vec <- c(1, 2, 4, 8, 16)
vec[c(1, 2, 5)]
Noms des éléments
Si les éléments de votre vecteur ont des noms, vous pouvez les
extraire… par leur nom ! Pour cela, placez un nom (ou un vecteur de
noms) entre parenthèses derrière un vecteur. Entourez chaque nom de
guillemets ", par ex.
vec2[c("alpha", "beta")].
Extrayez l’élément nommé gamma du vecteur ci-dessous.
vec2 <- c(alpha = 1, beta = 2, gamma = 3)
vec2 <- c(alpha = 1, beta = 2, gamma = 3)
vec2["gamma"]
Opérations vectorisées
A votre avis, qu’est-ce que le code ci-dessous va retourner ? Regardez par vous-même.
c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) + c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Recyclage des vecteurs
Prédisez ce que le code ci-dessous renverra. Regardez ensuite le résultat.
1 + c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Types
Types
Types atomiques
De quel type s’agit-il ?
Entier (integer en anglais)
Créez un vecteur d’entiers de un à cinq. Selon vous, pourquoi est-il parfois utile d’utiliser des types integers au lieu de numbers/doubles ?
c(1L, 2L, 3L, 4L, 5L)
Arithmétique en virgule flottante
Les ordinateurs doivent utiliser une quantité limitée de mémoire pour stocker des nombres décimaux (ce qui peut parfois nécessiter une précision infinie). Par conséquent, certaines décimales ne peuvent être enregistrées que sous forme d’approximations plus ou moins précises. De temps en temps, vous remarquerez des effets secondaires de cette imprécision, comme ci-dessous.
Calculez la racine carrée de deux, mettez la réponse au carré (par exemple, multipliez la racine carrée de deux par la racine carrée de deux), puis soustrayez deux du résultat. Quelle réponse attendez-vous ? Quelle réponse obtenez-vous ?
sqrt(2) * sqrt(2) - 2
sqrt(2)^2 - 2
Vecteur (vector)
Chaîne de caractères (character) ou objet ?
L’une des erreurs couramment commise dans R est d’appeler un objet alors que vous aviez en tête une chaîne de caractères et inversement.
Listes
Listes
Listes vs. vecteurs
Fabriquer une liste
Faites une liste qui contient les éléments 1001,
TRUE et "stories". Donnez un nom explicite à
chaque élément.
list(un_nombre = 1001, logique = TRUE, une_chaine_de_caracteres = "stories")
Extraire un élément
Selectionnez le chiffre 1001 de la liste ci-dessous.
des_trucs <- list(un_nombre = 1001, un_booleen = TRUE, une_chaine_de_caracteres = "stories")
things <- list(un_nombre = 1001, n_booleen = TRUE, une_chaine_de_caracteres = "stories")
things$un_nombre
data.frame
Il est possible de créer un jeu de données (ou data frame en anglais)
avec la fonction data.frame(), qui fonctionne de manière
tout à fait similaire à c() et list().
Assemblez les vecteurs ci-dessous dans un jeu de données avec les noms
de colonnes numbers, logicals,
strings.
nums <- c(1, 2, 3, 4)
logs <- c(TRUE, TRUE, FALSE, TRUE)
strs <- c("pomme", "banane", "carotte", "canard")
nombre <- c(1, 2, 3, 4)
logs <- c(TRUE, TRUE, FALSE, TRUE)
caract <- c("pomme", "banane", "carotte", "canard")
data.frame(nb = nombre, logiques = logs, caracteres = caract)
Extraire une colonne
Étant donné qu’un data.frame est un type de liste (avec des éléments
nommés), comment pourriez-vous extraire la colonne strings
du data frame df ci-dessous ? Essayez !
nums <- c(1, 2, 3, 4)
logs <- c(TRUE, TRUE, FALSE, TRUE)
strs <- c("pomme", "banane", "carotte", "canard")
df <- data.frame(numbers = nums, logicals = logs, strings = strs)
df$strings
Packages
Packages
L’erreur classique
Charger un package
Dans le bloc de code ci-dessous, chargez le package
{tidyverse}. {tidyverse} est un metapackage,
il charge toute une floppée de packages en même temps. Ainsi, chaque
fois que vous chargez {tidyverse}, {tidyverse}
charge également {ggplot2}, {dplyr},
{tibble}, {tidyr}, {readr} et
{purrr}.
# library(tidyverse)
Guillemets
Saviez-vous que library() est une fonction spéciale dans
R ? Vous pouvez passer dans library() un nom de package
entre guillemets, comme library("tidyverse"), ou sans
guillemets, comme library(tidyverse). Les deux
fonctionneront ! Ce n’est souvent pas le cas avec les fonctions R.
En général, vous devez toujours utiliser des guillemets, sauf si vous écrivez le nom de quelque chose qui est déjà chargé dans la mémoire de R, comme une fonction, un vecteur ou un data.frame.
Installer des packages
Mais que faire si le package que vous souhaitez charger n’est pas
installé sur votre ordinateur ? Comment installer le package
{sudoku} sur votre propre ordinateur ?
# install.packages("sudoku")
Félicitations !
Toutes nos félicitations. Vous connaissez maintenant le fonctionnement des principes de base de R. Bien que vous ne puissiez vous considérer comme un Data Scientist, ce bref aperçu de R vous aidera pour l’analyse des données. Chaque fois que R fera quelque chose d’inattendu, vous pourrez désormais appliquer vos connaissances sur le fonctionnement de R pour comprendre ce qui n’a pas fonctionné !