Operator %in%
Część sekcji Podstawy ścieżki R w Coddy. Lekcja 70 z 78.
Czasami trzeba sprawdzić, czy wartości występują w wektorze. Operator %in% umożliwia łatwe sprawdzanie przynależności, zwracając TRUE dla każdego pasującego elementu, a w przeciwnym razie FALSE.
Podstawowa składnia sprawdza, czy wartości po lewej stronie występują w wektorze po prawej stronie:
fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)Wynik:
[1] TRUEMożesz też sprawdzać wiele wartości jednocześnie. Operator zwraca wektor logiczny z jednym wynikiem dla każdej testowanej wartości:
fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)Wynik:
[1] TRUE FALSE TRUEDzięki temu %in% idealnie nadaje się do filtrowania. W połączeniu z indeksowaniem logicznym możesz wyodrębnić elementy należące do określonego zbioru:
numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])Wynik:
[1] 1 3 2Operator %in% jest szczególnie przydatny podczas sprawdzania poprawności danych wprowadzanych przez użytkownika lub filtrowania danych na podstawie zdefiniowanej listy akceptowanych wartości.
Wyzwanie
ŁatwyOtrzymasz trzy wiersze danych wejściowych:
- Rozdzieloną przecinkami listę produktów z twoich zapasów (np.
apple,banana,milk,bread,eggs,cheese) - Rozdzieloną przecinkami listę produktów z twojej listy zakupów (np.
milk,butter,eggs,juice) - Rozdzieloną przecinkami listę produktów w promocji (np.
bread,juice,yogurt)
Używając operatora %in%:
- Utwórz wektory znakowe z każdego rozdzielonego przecinkami wiersza danych wejściowych
- Sprawdź, które produkty z listy zakupów masz już w zapasach, i wypisz wynikowy wektor logiczny
- Odfiltruj i wypisz produkty z listy zakupów, których NIE masz w zapasach (produkty, które musisz kupić)
- Odfiltruj i wypisz produkty, które musisz kupić i które są również w promocji
Na przykład, jeśli dane wejściowe to:
apple,banana,milk,bread,eggs
milk,butter,eggs,juice,apple
bread,juice,yogurt,butterWynik powinien być następujący:
[1] TRUE FALSE TRUE FALSE TRUE
[1] "butter" "juice"
[1] "butter" "juice"Wyjaśnienie:
- Lista zakupów sprawdzona względem zapasów: milk (TRUE), butter (FALSE), eggs (TRUE), juice (FALSE), apple (TRUE)
- Produkty, których NIE ma w zapasach (trzeba je kupić): butter, juice
- Produkty do kupienia, które są w promocji: zarówno butter, jak i juice są na liście produktów w promocji
Użyj operatora ! z %in%, aby znaleźć elementy, których NIE ma w wektorze.
Spróbuj swoich sił
# Odczytaj dane wejściowe
con <- file("stdin", "r")
inventory_input <- suppressWarnings(readLines(con, n = 1))
shopping_list_input <- suppressWarnings(readLines(con, n = 1))
sale_items_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# TODO: Napisz swój kod poniżej
# 1. Utwórz wektory znakowe z każdej danej wejściowej rozdzielonej przecinkami, używając strsplit()
# 2. Sprawdź, które produkty z listy zakupów masz już w zapasach (użyj %in%)
# 3. Wybierz produkty z listy zakupów, których NIE masz w zapasach (użyj ! z %in%)
# 4. Wybierz produkty, które musisz kupić i które są też w promocjiTa 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