En R, il n'existe pas de type scalaire isolé : un simple nombre comme x <- 5 est en réalité un vecteur de longueur 1.
Le vecteur atomique est la brique élémentaire absolue de R. C'est une suite ordonnée d'éléments qui partagent tous strictement le même type de données (numérique, caractère, ou logique).
1. Créer un vecteur avec la fonction c()#
La fonction fondamentale pour combiner des valeurs en un vecteur est c() (concatenate ou combine) :
# Vecteur numérique
notes <- c(12.5, 15, 18, 9, 14.5)
# Vecteur de chaînes de caractères
villes <- c("Paris", "Lyon", "Marseille", "Bordeaux")
# Vecteur de booléens
statuts <- c(TRUE, FALSE, TRUE, TRUE)
[!WARNING] La règle de coercition automatique :
Si vous mélangez des types différents au sein d'un même vecteur, R convertit automatiquement tous les éléments vers le type le plus général selon la hiérarchie :
logical\(\to\)integer\(\to\)numeric\(\to\)character.
2. Générer des séquences et des répétitions#
Plutôt que d'écrire tous les éléments à la main, R dispose de générateurs de séquences performants :
# 1. L'opérateur deux-points (suite d'entiers consécutifs)
entiers <- 1:10 # [1] 1 2 3 4 5 6 7 8 9 10
decroissant <- 5:1 # [1] 5 4 3 2 1
# 2. La fonction seq() avec pas régulier
impairs <- seq(from = 1, to = 9, by = 2) # [1] 1 3 5 7 9
# 3. La fonction seq() avec nombre d'éléments imposé
grille <- seq(from = 0, to = 1, length.out = 5) # [1] 0.00 0.25 0.50 0.75 1.00
# 4. Répéter des motifs avec rep()
rep(1:3, times = 2) # [1] 1 2 3 1 2 3
rep(1:3, each = 2) # [1] 1 1 2 2 3 3
# 5. Tirage aléatoire avec sample()
tirage_loto <- sample(1:49, size = 5, replace = FALSE)
3. L'indexation et le filtrage (Slicing)#
Contrairement à Python où l'indexation commence à \(0\), en R l'indexation commence toujours à 1.
On extrait des sous-parties d'un vecteur à l'aide des crochets [] :
1. Par indices positifs (sélection)#
notes[1] # Premier élément : [1] 12
notes[c(2, 4)] # Deuxième et quatrième éléments : [1] 18 15
notes[1:3] # Les trois premiers éléments : [1] 12 18 9
2. Par indices négatifs (exclusion)#
notes[-1] # Tout SAUF le premier élément : [1] 18 9 15 7 20
notes[-c(3, 5)] # Exclut le 3e et le 5e élément
3. Par condition logique (filtrage puissant)#
C'est l'un des mécanismes les plus utilisés en analyse de données :
# Sélectionner uniquement les notes supérieures ou égales à 10
notes_admis <- notes[notes >= 10]
print(notes_admis) # [1] 12 18 15 20
4. La vectorisation et le recyclage#
En R, les opérateurs arithmétiques agissent terme à terme sur les vecteurs sans aucune boucle for :
quantites <- c(2, 5, 10)
prix_unitaires <- c(15, 20, 8)
# Multiplication vectorielle élément par élément
totaux <- quantites * prix_unitaires
print(totaux) # [1] 30 100 80
Si les deux vecteurs sont de tailles différentes, R applique la règle du recyclage : le vecteur le plus court est répété jusqu'à atteindre la longueur du plus long.
5. Fonctions statistiques de synthèse sur vecteurs#
R propose une batterie complète de fonctions d'agrégation statistique :
valeurs <- c(10, 20, 15, 30, 25, NA)
length(valeurs) # Nombre d'éléments : [1] 6
sum(valeurs, na.rm = TRUE) # Somme : [1] 100
mean(valeurs, na.rm = TRUE) # Moyenne : [1] 20
median(valeurs, na.rm = TRUE)# Médiane : [1] 20
sd(valeurs, na.rm = TRUE) # Écart-type : [1] 7.905694
min(valeurs, na.rm = TRUE) # Minimum : [1] 10
max(valeurs, na.rm = TRUE) # Maximum : [1] 30
# Résumé complet en une ligne
summary(valeurs)
[!NOTE] L'argument
na.rm = TRUE:
Par défaut, si un vecteur contient au moins une valeurNA, la moyenne ou la somme renverraNA. L'argumentna.rm = TRUE(NA remove) indique explicitement à R d'ignorer les données manquantes dans le calcul.
Mise en pratique#
- Créez un vecteur nommé
temperaturescontenant les valeurs suivantes :18, 22, 19, 25, 28, 17, 23. - Calculez la température moyenne et l'écart-type de cette série.
- Extrayez dans un nouveau vecteur
jours_chaudsles températures strictement supérieures à 20 degrés. - Convertissez toutes les températures en degrés Fahrenheit à l'aide de la formule vectorielle : \(F = T \times 1.8 + 32\).
Commentaires