Menu
Coddy logo textTech

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] TRUE

Moż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  TRUE

Dzię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 2

Operator %in% jest szczególnie przydatny podczas sprawdzania poprawności danych wprowadzanych przez użytkownika lub filtrowania danych na podstawie zdefiniowanej listy akceptowanych wartości.

challenge icon

Wyzwanie

Łatwy

Otrzymasz trzy wiersze danych wejściowych:

  1. Rozdzieloną przecinkami listę produktów z twoich zapasów (np. apple,banana,milk,bread,eggs,cheese)
  2. Rozdzieloną przecinkami listę produktów z twojej listy zakupów (np. milk,butter,eggs,juice)
  3. Rozdzieloną przecinkami listę produktów w promocji (np. bread,juice,yogurt)

Używając operatora %in%:

  1. Utwórz wektory znakowe z każdego rozdzielonego przecinkami wiersza danych wejściowych
  2. Sprawdź, które produkty z listy zakupów masz już w zapasach, i wypisz wynikowy wektor logiczny
  3. Odfiltruj i wypisz produkty z listy zakupów, których NIE masz w zapasach (produkty, które musisz kupić)
  4. 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,butter

Wynik 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 promocji
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