Vektorarithmetik & Recycling
Teil des Abschnitts Grundlagen der R-Journey von Coddy — Lektion 69 von 78.
Wenn Sie arithmetische Operationen zwischen zwei Vektoren der gleichen Länge durchführen, wendet R die Operation elementweise an:
a <- c(1, 2, 3)
b <- c(10, 20, 30)
print(a + b)Ausgabe:
[1] 11 22 33Aber was passiert, wenn die Vektoren unterschiedliche Längen haben? R verwendet ein Verhalten namens Recycling. Der kürzere Vektor wird wiederholt, um der Länge des längeren zu entsprechen:
numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)Ausgabe:
[1] 10 200 30 400 50 600Hier wurde multiplier zu c(10, 100, 10, 100, 10, 100) recycelt, bevor die Multiplikation stattfand. Dies ist besonders nützlich, wenn mit einem einzelnen Wert gearbeitet wird:
prices <- c(10, 20, 30)
print(prices * 1.1)Ausgabe:
[1] 11 22 33Der einzelne Wert 1.1 wird wiederholt (recycled), um der Länge von prices zu entsprechen. Seien Sie vorsichtig, wenn die Länge des längeren Vektors kein Vielfaches des kürzeren ist, da R die Operation zwar weiterhin ausführt, aber möglicherweise eine Warnung über teilweises Recycling ausgibt.
Aufgabe
EinfachSie erhalten zwei Eingabezeilen:
- Eine durch Kommas getrennte Liste von Zahlen, die Basiswerte darstellen (z. B.
10,20,30,40,50,60) - Eine durch Kommas getrennte Liste von Multiplikatoren (z. B.
2,5)
Verwenden Sie Vektorarithmetik und Recycling:
- Erstellen Sie einen numerischen Vektor aus den Basiswerten
- Erstellen Sie einen numerischen Vektor aus den Multiplikatoren
- Multiplizieren Sie die Basiswerte mit den Multiplikatoren (R wird den kürzeren Vektor recyceln)
- Geben Sie das Ergebnis der Multiplikation aus
- Addieren Sie
100zu jedem Element der ursprünglichen Basiswerte (Einzelwert-Recycling) - Geben Sie das Ergebnis der Addition aus
- Subtrahieren Sie den Multiplikatoren-Vektor vom Basiswerte-Vektor
- Geben Sie das Ergebnis der Subtraktion aus
Zum Beispiel, wenn die Eingaben wie folgt lauten:
5,10,15,20,25,30
3,7Die Ausgabe sollte wie folgt aussehen:
[1] 15 70 45 140 75 210
[1] 105 110 115 120 125 130
[1] 2 3 12 13 22 23Erklärung:
- Multiplikation: Die Multiplikatoren
c(3, 7)werden zuc(3, 7, 3, 7, 3, 7)recycelt, was zu5*3, 10*7, 15*3, 20*7, 25*3, 30*7führt - Addition: Der Einzelwert
100wird recycelt, um zu jedem Element addiert zu werden - Subtraktion: Die Multiplikatoren werden erneut recycelt, was zu
5-3, 10-7, 15-3, 20-7, 25-3, 30-7führt
Spickzettel
Bei der Durchführung arithmetischer Operationen zwischen Vektoren unterschiedlicher Länge verwendet R das sogenannte Recycling – der kürzere Vektor wird wiederholt, um der Länge des längeren Vektors zu entsprechen:
numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)Ausgabe:
[1] 10 200 30 400 50 600Der Vektor multiplier wird vor der Multiplikation zu c(10, 100, 10, 100, 10, 100) recycelt.
Das Recycling einzelner Werte ist besonders nützlich:
prices <- c(10, 20, 30)
print(prices * 1.1)Ausgabe:
[1] 11 22 33Der Wert 1.1 wird recycelt, um der Länge von prices zu entsprechen.
Hinweis: R kann eine Warnung ausgeben, wenn die Länge des längeren Vektors kein Vielfaches der Länge des kürzeren Vektors ist.
Probier es selbst
# Eingabe lesen
con <- file("stdin", "r")
base_input <- suppressWarnings(readLines(con, n = 1))
multipliers_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Die durch Kommata getrennten Werte in numerische Vektoren umwandeln
base_values <- as.numeric(strsplit(base_input, ",")[[1]])
multipliers <- as.numeric(strsplit(multipliers_input, ",")[[1]])
# TODO: Schreiben Sie Ihren Code unten
# 1. Multiplizieren Sie base_values mit multipliers (Recycling erfolgt automatisch)
# 2. Geben Sie das Multiplikationsergebnis aus
# 3. Addieren Sie 100 zu jedem Element von base_values
# 4. Geben Sie das Additionsergebnis aus
# 5. Subtrahieren Sie multipliers von base_values
# 6. Geben Sie das Subtraktionsergebnis ausDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
4Operatoren Teil 2
Logische Operatoren (AND, OR)Logische Operatoren Teil 2 (NOT)Wiederholung – Einfache LogikVektorisierte Logik Teil 1Vektorisierte Logik Teil 27Rechnungs-Split-Rechner
WillkommensnachrichtBenutzereingaben abfragen10FizzBuzz mit einer Besonderheit
SpielübersichtDie FizzBuzz-Funktion13Vektoren für Fortgeschrittene
Vektor-Slicing und IndizierungLogische IndizierungVektorarithmetik & RecyclingDer %in%-Operator2Variablen und Datentypen
Numerischer DatentypGanzzahl-DatentypZeichen-DatentypLogischer DatentypDatentypen prüfenBenennungskonventionenFehlende Werte: NAZusammenfassung – Variablenerstellung5Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher TaschenrechnerVerschachteltes If - Else8Schleifen
For-SchleifeWhile-SchleifeBreakNext (Continue)Rückblick - FakultätSequenzgenerierung (seq, :)Verschachtelte SchleifenRückblick - Dynamische Eingabe3Operatoren Teil 1
Arithmetische OperatorenGanzzahlige Division und ModuloZuweisungsoperatorenWiederholung - Einfache MathematikVergleichsoperatoren6Grundlagen der Ein- und Ausgabe
Print-AusgabeCat zur AusgabeAusgabe mit VariablenEingabe lesen mit readline()Grundlagen der TypumwandlungWiederholung – AltersrechnerWiederholung – Wahr oder Falsch9Funktionen
Funktionen deklarierenFunktionsargumenteRückgabewerteWiederholung - Sigma-FunktionWiederholung - ValidierungsfunktionStandard-Parameterwerte