Menu
Coddy logo textTech

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 33

Aber was passiert, wenn die Vektoren unterschiedliche Längen haben? R verwendet ein Verhalten namens Recycling. Der kürzere Vektor wird wiederholt, sodass er an die Länge des längeren angepasst wird:

numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)

Ausgabe:

[1]  10 200  30 400  50 600

Hier 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 33

Der einzelne Wert 1.1 wird wiederholt, um an die Länge von prices angepasst zu werden. Sei vorsichtig, wenn die Länge des längeren Vektors kein Vielfaches des kürzeren ist, da R die Operation trotzdem ausführt, aber möglicherweise eine Warnung über unvollständiges Wiederholen ausgibt.

challenge icon

Aufgabe

Einfach

Du erhältst zwei Eingabezeilen:

  1. Eine durch Kommas getrennte Liste von Zahlen, die Basiswerte darstellen (z. B. 10,20,30,40,50,60)
  2. Eine durch Kommas getrennte Liste von Multiplikatoren (z. B. 2,5)

Verwende Vektorarithmetik und Recycling:

  1. Erstelle einen numerischen Vektor aus den Basiswerten
  2. Erstelle einen numerischen Vektor aus den Multiplikatoren
  3. Multipliziere die Basiswerte mit den Multiplikatoren (R verwendet Recycling für den kürzeren Vektor)
  4. Gib das Ergebnis der Multiplikation aus
  5. Addiere 100 zu jedem Element der ursprünglichen Basiswerte (Recycling eines einzelnen Werts)
  6. Gib das Ergebnis der Addition aus
  7. Subtrahiere den Multiplikatorvektor vom Basiswertevektor
  8. Gib das Ergebnis der Subtraktion aus

Wenn die Eingaben beispielsweise folgendermaßen lauten:

5,10,15,20,25,30
3,7

Die Ausgabe sollte folgendermaßen lauten:

[1]  15  70  45 140  75 210
[1] 105 110 115 120 125 130
[1]  2  3 12 13 22 23

Erklärung:

  • Multiplikation: Die Multiplikatoren c(3, 7) werden zu c(3, 7, 3, 7, 3, 7) recycelt, wodurch 5*3, 10*7, 15*3, 20*7, 25*3, 30*7 entstehen
  • Addition: Der einzelne Wert 100 wird recycelt, um ihn zu jedem Element zu addieren
  • Subtraktion: Die Multiplikatoren werden erneut recycelt, wodurch 5-3, 10-7, 15-3, 20-7, 25-3, 30-7 entstehen

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 aus
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen

Übe selbstständig: Online-R-Compiler