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 50Moż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 40Indeksy 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 50Moż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 40Pamię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)].
Wyzwanie
ŁatwyOtrzymasz dwa wiersze danych wejściowych:
- Rozdzieloną przecinkami listę liczb (np.
100,200,300,400,500,600,700) - 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:
- Wypisz elementy z pozycji 1, 3 i 5, używając wektora indeksów
- Wypisz elementy od pozycji 2 do pozycji 4, używając operatora dwukropka
- Wypisz wektor bez elementu o pierwszym podanym indeksie (używając indeksowania ujemnego)
- 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,5Wynik powinien być następujący:
[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70Wyjaś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)Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Operatory, część 2
Operatory logiczne (AND, OR)Operatory logiczne, część 2 (NOT)Powtórka — prosta logikaLogika wektoryzowana, część 1Logika wektoryzowana, część 27Kalkulator podziału rachunku
Wiadomość powitalnaPobieranie danych od użytkownika10FizzBuzz z niespodzianką
Omówienie gryFunkcja FizzBuzz13Zaawansowane wektory
Wycinanie i indeksowanie wektorówIndeksowanie logiczneArytmetyka wektorów i recyklingOperator %in%2Zmienne i typy danych
Liczbowy typ danychCałkowity typ danychZnakowy typ danychLogiczny typ danychSprawdzanie typów danychKonwencje nazewnictwaBrakujące wartości: NAPodsumowanie – tworzenie zmiennych8Pętle
Pętla forPętla whilePrzerwijNastępna iteracja (continue)Powtórka — silniaGenerowanie sekwencji (seq, :)Pętle zagnieżdżonePowtórka — dynamiczne wprowadzanie danych3Operatory, część 1
Operatory arytmetyczneDzielenie całkowite i moduloOperatory przypisaniaPowtórka — prosta matematykaOperatory porównania6Podstawowe wejście/wyjście
Wyświetlanie danychCat jako wyjścieWyjście z użyciem zmiennychOdczyt danych wejściowych za pomocą readline()Podstawy konwersji typówPowtórka — kalkulator wiekuPowtórka — prawda czy fałsz9Funkcje
Deklarowanie funkcjiArgumenty funkcjiWartości zwracanePowtórzenie — funkcja SigmaPowtórzenie — funkcja walidującaDomyślne wartości parametrówPoćwicz samodzielnie: Kompilator R online