Menu
Coddy logo textTech

Wycinanie i indeksowanie wektorów

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

Dowiedziałeś się, jak uzyskiwać dostęp do pojedynczych elementów i iterować po wektorach. Teraz zobaczmy, jak wyodrębnić kilka elementów naraz za pomocą wycinania. Ta technika pozwala pobrać podzbiór wektora w jednej operacji.

Aby wyodrębnić wiele elementów, przekaż wewnątrz nawiasów kwadratowych wektor indeksów:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])

Wynik:

[1] 10 30 50

Możesz także użyć operatora dwukropka, aby wybrać zakres kolejnych elementów:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])

Wynik:

[1] 20 30 40

Indeksy ujemne są przydatne w R. Wykluczają elementy zamiast ich wybierać:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])

Wynik:

[1] 10 30 40 50

Możesz wykluczyć wiele elementów, przekazując wektor ujemnych indeksów:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])

Wynik:

[1] 20 30 40

Pamiętaj: nie możesz mieszać indeksów dodatnich i ujemnych w tym samym wyborze. R zgłosi błąd, jeśli spróbujesz numbers[c(1, -2)].

challenge icon

Wyzwanie

Łatwy

Otrzymasz dwa wiersze danych wejściowych:

  1. Rozdzieloną przecinkami listę liczb (np. 100,200,300,400,500,600,700)
  2. Dwa indeksy rozdzielone przecinkiem, określające zakres do wykluczenia (np. 2,5)

Kod początkowy już odczytuje dane wejściowe i tworzy wektor liczbowy. Wypisz dokładnie cztery wiersze, w tej kolejności:

  1. Wypisz elementy z pozycji 1, 3 i 5, używając wektora indeksów
  2. Wypisz elementy od pozycji 2 do pozycji 4, używając operatora dwukropka
  3. Wypisz wektor bez elementu o pierwszym podanym indeksie (używając indeksowania ujemnego)
  4. Wypisz wektor bez elementów od pierwszego indeksu do drugiego indeksu (używając indeksowania ujemnego z zakresem)

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

10,20,30,40,50,60,70
3,5

Wynik powinien być następujący:

[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70

Wyjaśnienie:

  • Elementy na pozycjach 1, 3, 5 to: 10, 30, 50
  • Elementy od pozycji 2 do 4 to: 20, 30, 40
  • Wykluczenie pozycji 3 daje: 10, 20, 40, 50, 60, 70
  • Wykluczenie pozycji od 3 do 5 daje: 10, 20, 60, 70

Spróbuj swoich sił

# Wczytaj dane wejściowe
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# Przekształć liczby rozdzielone przecinkami w wektor liczbowy
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])

# Wczytaj dwa indeksy
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]

# TODO: Napisz swój kod poniżej
# 1. Wypisz elementy na pozycjach 1, 3 i 5, używając wektora indeksów

# 2. Wypisz elementy od pozycji 2 do pozycji 4, używając operatora dwukropka

# 3. Wypisz wektor z pominięciem elementu o indeksie idx1 (indeksowanie ujemne)

# 4. Wypisz wektor z pominięciem elementów od indeksu idx1 do indeksu idx2 (indeksowanie ujemne z zakresem)
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