Découpage et indexation de vecteurs
Fait partie de la section Fondamentaux du Journey R de Coddy — leçon 67 sur 78.
Vous avez appris comment accéder à des éléments individuels et itérer à travers des vecteurs. Maintenant, explorons comment extraire plusieurs éléments à la fois en utilisant le slicing. Cette technique vous permet de récupérer un sous-ensemble d'un vecteur en une seule opération.
Pour extraire plusieurs éléments, passez un vecteur d'indices à l'intérieur des crochets :
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])Résultat :
[1] 10 30 50Vous pouvez également utiliser l'opérateur deux-points pour sélectionner une plage d'éléments consécutifs :
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])Sortie :
[1] 20 30 40Les indices négatifs sont puissants en R. Ils excluent des éléments au lieu de les sélectionner :
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])Sortie :
[1] 10 30 40 50Vous pouvez exclure plusieurs éléments en passant un vecteur d'indices négatifs :
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])Sortie :
[1] 20 30 40Rappel : vous ne pouvez pas mélanger des indices positifs et négatifs dans la même sélection. R renverra une erreur si vous essayez numbers[c(1, -2)].
Défi
FacileVous recevrez deux lignes d'entrée :
- Une liste de nombres séparés par des virgules (par exemple,
100,200,300,400,500,600,700) - Deux indices séparés par une virgule représentant une plage à exclure (par exemple,
2,5)
Effectuez les opérations suivantes :
- Créez un vecteur numérique à partir des nombres séparés par des virgules
- Affichez les éléments aux positions 1, 3 et 5 en utilisant un vecteur d'indices
- Affichez les éléments de la position 2 à la position 4 en utilisant l'opérateur deux-points (colon operator)
- Affichez le vecteur en excluant l'élément au premier indice donné (en utilisant l'indexation négative)
- Affichez le vecteur en excluant les éléments du premier au deuxième indice (en utilisant l'indexation négative avec une plage)
Par exemple, si les entrées sont :
10,20,30,40,50,60,70
3,5La sortie devrait être :
[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70Explication :
- Les éléments aux positions 1, 3, 5 sont : 10, 30, 50
- Les éléments de la position 2 à 4 sont : 20, 30, 40
- L'exclusion de la position 3 donne : 10, 20, 40, 50, 60, 70
- L'exclusion des positions 3 à 5 donne : 10, 20, 60, 70
Aide-mémoire
Pour extraire plusieurs éléments d'un vecteur, passez un vecteur d'indices à l'intérieur de crochets :
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)]) # [1] 10 30 50Utilisez l'opérateur deux-points pour sélectionner une plage d'éléments consécutifs :
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4]) # [1] 20 30 40Les indices négatifs excluent des éléments au lieu de les sélectionner :
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2]) # [1] 10 30 40 50Excluez plusieurs éléments en passant un vecteur d'indices négatifs :
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)]) # [1] 20 30 40Important : Vous ne pouvez pas mélanger des indices positifs et négatifs dans la même sélection.
Essayez vous-même
# Lire l'entrée
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Analyser les nombres séparés par des virgules dans un vecteur numérique
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])
# Analyser les deux indices
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]
# TODO: Écrivez votre code ci-dessous
# 1. Imprimer les éléments aux positions 1, 3 et 5 en utilisant un vecteur d'indices
# 2. Imprimer les éléments de la position 2 à la position 4 en utilisant l'opérateur deux-points
# 3. Imprimer le vecteur en excluant l'élément à idx1 (indexation négative)
# 4. Imprimer le vecteur en excluant les éléments de idx1 à idx2 (indexation négative avec plage)Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
4Opérateurs - Partie 2
Opérateurs logiques (AND, OR)Opérateurs logiques - Partie 2 (NOT)Récapitulatif - Logique simpleLogique vectorisée - Partie 1Logique vectorisée - Partie 27Calculateur de partage d'addition
Message de bienvenueRécupérer la saisie utilisateur10FizzBuzz avec une variante
Présentation du jeuLa fonction FizzBuzz13Vecteurs avancés
Découpage et indexation de vecteursIndexation logiqueArithmétique des vecteurs et recyclageL'opérateur %in%2Variables et types de données
Type de données numériqueType de données entierType de données caractèreType de données logiqueVérification des types de donnéesConventions de nommageValeurs manquantes : NARécapitulatif - Création de variables8Boucles
Boucle ForBoucle WhileBreakSuivant (Continue)Récapitulatif - FactorielleGénération de séquences (seq, :)Boucles imbriquéesRécapitulatif - Saisie dynamique3Opérateurs, partie 1
Opérateurs arithmétiquesDivision entière et moduloOpérateurs d'affectationRécapitulatif - Mathématiques simplesOpérateurs de comparaison6Entrées/Sorties de base
Affichage avec PrintCat pour l'affichageAffichage avec des variablesLire l'entrée avec readline()Bases de la conversion de typesRécapitulatif - Calculateur d'âgeRécapitulatif - Vrai ou Faux9Fonctions
Déclarer une fonctionArguments de fonctionValeurs de retourRécapitulatif - Fonction SigmaRécapitulatif - Fonction de validationValeurs de paramètres par défaut