Menu
Coddy logo textTech

Arytmetyka wektorów i recykling

Część sekcji Podstawy ścieżki R w Coddy. Lekcja 69 z 78.

Gdy wykonujesz działania arytmetyczne na dwóch wektorach o tej samej długości, R stosuje działanie element po elemencie:

a <- c(1, 2, 3)
b <- c(10, 20, 30)
print(a + b)

Wynik:

[1] 11 22 33

A co się dzieje, gdy wektory mają różne długości? R stosuje mechanizm nazywany powielaniem. Krótszy wektor jest powtarzany, aby dopasować jego długość do długości dłuższego wektora:

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

Wynik:

[1]  10 200  30 400  50 600

Tutaj multiplier zostało powielone, aby przed mnożeniem utworzyć c(10, 100, 10, 100, 10, 100). Jest to szczególnie przydatne podczas wykonywania operacji na pojedynczej wartości:

prices <- c(10, 20, 30)
print(prices * 1.1)

Wynik:

[1] 11 22 33

Pojedyncza wartość 1.1 jest powielana, aby dopasować długość do prices. Zachowaj ostrożność, gdy długość dłuższego wektora nie jest wielokrotnością długości krótszego, ponieważ R i tak wykona operację, ale może wyświetlić ostrzeżenie o częściowym powielaniu.

challenge icon

Wyzwanie

Łatwy

Otrzymasz dwa wiersze danych wejściowych:

  1. Rozdzielona przecinkami lista liczb reprezentujących wartości bazowe (np. 10,20,30,40,50,60)
  2. Rozdzielona przecinkami lista mnożników (np. 2,5)

Używając arytmetyki wektorowej i recyklingu:

  1. Utwórz wektor liczbowy z wartości bazowych
  2. Utwórz wektor liczbowy z mnożników
  3. Pomnóż wartości bazowe przez mnożniki (R powtórzy krótszy wektor)
  4. Wyświetl wynik mnożenia
  5. Dodaj 100 do każdego elementu oryginalnych wartości bazowych (recykling pojedynczej wartości)
  6. Wyświetl wynik dodawania
  7. Odejmij wektor mnożników od wektora wartości bazowych
  8. Wyświetl wynik odejmowania

Na przykład, jeśli dane wejściowe to:

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

Wynik powinien być następujący:

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

Wyjaśnienie:

  • Mnożenie: Mnożniki c(3, 7) są powtarzane jako c(3, 7, 3, 7, 3, 7), co daje 5*3, 10*7, 15*3, 20*7, 25*3, 30*7
  • Dodawanie: Pojedyncza wartość 100 jest powtarzana i dodawana do każdego elementu
  • Odejmowanie: Mnożniki są ponownie powtarzane, co daje 5-3, 10-7, 15-3, 20-7, 25-3, 30-7

Spróbuj swoich sił

# Odczytaj dane wejściowe
con <- file("stdin", "r")
base_input <- suppressWarnings(readLines(con, n = 1))
multipliers_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# Przekształć wartości oddzielone przecinkami w wektory liczbowe
base_values <- as.numeric(strsplit(base_input, ",")[[1]])
multipliers <- as.numeric(strsplit(multipliers_input, ",")[[1]])

# TODO: Napisz swój kod poniżej
# 1. Pomnóż base_values przez multipliers (recykling nastąpi automatycznie)
# 2. Wyświetl wynik mnożenia
# 3. Dodaj 100 do każdego elementu base_values
# 4. Wyświetl wynik dodawania
# 5. Odejmij multipliers od base_values
# 6. Wyświetl wynik odejmowania
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator R online