Utilisation de seq_along()
Fait partie de la section Fondamentaux du Journey R de Coddy — leçon 64 sur 78.
Parfois, vous avez besoin à la fois de la valeur de l'élément et de sa position dans le vecteur. Bien que l'itération directe sur les éléments soit propre, elle ne vous donne pas accès à l'index. La fonction seq_along() résout ce problème en générant une séquence d'indices pour n'importe quel vecteur.
La fonction seq_along() retourne une séquence de 1 à la longueur du vecteur :
fruits <- c("apple", "banana", "cherry")
print(seq_along(fruits))Sortie :
[1] 1 2 3En bouclant sur ces indices, vous pouvez accéder à la fois à la position et à la valeur :
fruits <- c("apple", "banana", "cherry")
for (i in seq_along(fruits)) {
cat(i, ":", fruits[i], "\n")
}Sortie :
1 : apple
2 : banana
3 : cherryCette approche est particulièrement utile lorsque vous devez modifier des éléments à des positions spécifiques ou comparer des éléments avec leurs voisins. L'utilisation de seq_along() est plus sûre que 1:length(vec) car elle gère correctement les vecteurs vides, en renvoyant une séquence vide au lieu de 1:0.
Défi
FacileVous recevrez une seule ligne d'entrée contenant des nombres séparés par des virgules (par exemple, 10,20,30,40,50).
En utilisant seq_along() pour itérer sur le vecteur avec des indices :
- Créez un vecteur à partir de l'entrée séparée par des virgules
- Parcourez le vecteur en utilisant
seq_along()pour obtenir à la fois l'indice et la valeur - Pour chaque élément, affichez l'indice, la valeur et la somme cumulative jusqu'à ce point (somme de tous les éléments de la position 1 à la position actuelle)
Utilisez cat() avec le format : Position X: VALUE (Running total: TOTAL) suivi d'un saut de ligne.
Par exemple, si l'entrée est :
5,10,15,20La sortie devrait être :
Position 1: 5 (Running total: 5)
Position 2: 10 (Running total: 15)
Position 3: 15 (Running total: 30)
Position 4: 20 (Running total: 50)Explication : À la position 1, la valeur est 5 et le total cumulé est 5. À la position 2, la valeur est 10 et le total cumulé est 5+10=15. À la position 3, la valeur est 15 et le total cumulé est 5+10+15=30, et ainsi de suite.
Conseil : Utilisez sum(vector[1:i]) pour calculer la somme cumulative jusqu'à la position i.
Aide-mémoire
La fonction seq_along() génère une séquence d'indices allant de 1 à la longueur d'un vecteur :
fruits <- c("apple", "banana", "cherry")
print(seq_along(fruits))
# Résultat : [1] 1 2 3Utilisez seq_along() dans une boucle pour accéder à la fois à l'indice et à la valeur :
fruits <- c("apple", "banana", "cherry")
for (i in seq_along(fruits)) {
cat(i, ":", fruits[i], "\n")
}
# Résultat :
# 1 : apple
# 2 : banana
# 3 : cherryL'utilisation de seq_along() est plus sûre que 1:length(vec) car elle gère correctement les vecteurs vides, en renvoyant une séquence vide au lieu de 1:0.
Essayez vous-même
# Lire l'entrée
con <- file("stdin", "r")
input_line <- suppressWarnings(readLines(con, n = 1))
close(con)
# Convertir la chaîne séparée par des virgules en un vecteur numérique
numbers <- as.numeric(strsplit(input_line, ",")[[1]])
# TODO: Écrivez votre code ci-dessous
# Utilisez seq_along() pour parcourir le vecteur
# Pour chaque position, affichez l'index, la valeur et le total cumulé
# Utilisez cat() avec le format : Position X: VALUE (Running total: TOTAL)\nCette 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 FizzBuzz2Variables 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éfaut12Itération sur les séquences
Itération sur les éléments d'un vecteurUtilisation de seq_along()Itération sur les caractères (strsplit)Fonctions de manipulation de chaînes