Arithmétique des vecteurs et recyclage
Fait partie de la section Fondamentaux du Journey R de Coddy — leçon 69 sur 78.
Lorsque vous effectuez des opérations arithmétiques entre deux vecteurs de la même longueur, R applique l'opération élément par élément :
a <- c(1, 2, 3)
b <- c(10, 20, 30)
print(a + b)Sortie :
[1] 11 22 33Mais que se passe-t-il lorsque les vecteurs ont des longueurs différentes ? R utilise un comportement appelé le recyclage. Le vecteur le plus court est répété pour correspondre à la longueur du plus long :
numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)Sortie :
[1] 10 200 30 400 50 600Ici, multiplier a été recyclé pour devenir c(10, 100, 10, 100, 10, 100) avant la multiplication. C'est particulièrement utile lors d'une opération avec une seule valeur :
prices <- c(10, 20, 30)
print(prices * 1.1)Sortie :
[1] 11 22 33La valeur unique 1.1 est recyclée pour correspondre à la longueur de prices. Soyez prudent lorsque la longueur du vecteur le plus long n'est pas un multiple de celle du plus court, car R effectuera tout de même l'opération mais pourra générer un avertissement concernant un recyclage partiel.
Défi
FacileVous recevrez deux lignes d'entrée :
- Une liste de nombres séparés par des virgules représentant des valeurs de base (par exemple,
10,20,30,40,50,60) - Une liste de multiplicateurs séparés par des virgules (par exemple,
2,5)
En utilisant l'arithmétique vectorielle et le recyclage :
- Créez un vecteur numérique à partir des valeurs de base
- Créez un vecteur numérique à partir des multiplicateurs
- Multipliez les valeurs de base par les multiplicateurs (R recyclera le vecteur le plus court)
- Affichez le résultat de la multiplication
- Ajoutez
100à chaque élément des valeurs de base originales (recyclage d'une valeur unique) - Affichez le résultat de l'addition
- Soustrayez le vecteur des multiplicateurs du vecteur des valeurs de base
- Affichez le résultat de la soustraction
Par exemple, si les entrées sont :
5,10,15,20,25,30
3,7La sortie devrait être :
[1] 15 70 45 140 75 210
[1] 105 110 115 120 125 130
[1] 2 3 12 13 22 23Explication :
- Multiplication : Les multiplicateurs
c(3, 7)sont recyclés enc(3, 7, 3, 7, 3, 7), ce qui donne5*3, 10*7, 15*3, 20*7, 25*3, 30*7 - Addition : La valeur unique
100est recyclée pour être ajoutée à chaque élément - Soustraction : Les multiplicateurs sont à nouveau recyclés, ce qui donne
5-3, 10-7, 15-3, 20-7, 25-3, 30-7
Aide-mémoire
Lors de l'exécution d'opérations arithmétiques entre des vecteurs de longueurs différentes, R utilise le recyclage - le vecteur le plus court est répété pour correspondre à la longueur du plus long :
numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)Sortie :
[1] 10 200 30 400 50 600Le vecteur multiplier est recyclé en c(10, 100, 10, 100, 10, 100) avant la multiplication.
Le recyclage d'une valeur unique est particulièrement utile :
prices <- c(10, 20, 30)
print(prices * 1.1)Sortie :
[1] 11 22 33La valeur 1.1 est recyclée pour correspondre à la longueur de prices.
Remarque : R peut générer un avertissement lorsque la longueur du vecteur le plus long n'est pas un multiple de celle du plus court.
Essayez vous-même
# Lire l'entrée
con <- file("stdin", "r")
base_input <- suppressWarnings(readLines(con, n = 1))
multipliers_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Analyser les valeurs séparées par des virgules en vecteurs numériques
base_values <- as.numeric(strsplit(base_input, ",")[[1]])
multipliers <- as.numeric(strsplit(multipliers_input, ",")[[1]])
# TODO: Écrivez votre code ci-dessous
# 1. Multiplier base_values par multipliers (le recyclage se fera automatiquement)
# 2. Imprimer le résultat de la multiplication
# 3. Ajouter 100 à chaque élément de base_values
# 4. Imprimer le résultat de l'addition
# 5. Soustraire multipliers de base_values
# 6. Imprimer le résultat de la soustractionCette 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