Menu
Coddy logo textTech

%in% Operatörü

Coddy'nin R Journey'sinin Temeller bölümünün bir parçası — ders 70 / 78.

Bazen bir vektör içinde değerlerin var olup olmadığını kontrol etmeniz gerekir. %in% operatörü, eşleşen her öğe için TRUE ve aksi takdirde FALSE döndürerek üyelik testi yapmak için temiz bir yol sağlar.

Temel sözdizimi, soldaki değerlerin sağdaki vektörde bulunup bulunmadığını kontrol eder:

fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)

Çıktı:

[1] TRUE

Aynı anda birden fazla değeri de kontrol edebilirsiniz. Operatör, test edilen her bir değer için bir sonuç içeren mantıksal bir vektör döndürür:

fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)

Çıktı:

[1]  TRUE FALSE  TRUE

Bu, %in% operatörünü filtreleme için mükemmel kılar. Mantıksal indeksleme ile birleştirildiğinde, belirli bir kümeye ait öğeleri ayıklayabilirsiniz:

numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])

Çıktı:

[1] 1 3 2

%in% operatörü, kullanıcı girişini doğrularken veya verileri önceden tanımlanmış kabul edilebilir değerler listesine göre filtrelerken özellikle yararlıdır.

challenge icon

Görev

Kolay

Üç satırlık bir girdi alacaksınız:

  1. Envanterinizdeki öğelerin virgülle ayrılmış listesi (örneğin, apple,banana,milk,bread,eggs,cheese)
  2. Alışveriş listenizdeki öğelerin virgülle ayrılmış listesi (örneğin, milk,butter,eggs,juice)
  3. İndirimde olan öğelerin virgülle ayrılmış listesi (örneğin, bread,juice,yogurt)

%in% operatörünü kullanarak:

  1. Her bir virgülle ayrılmış girdiden karakter vektörleri oluşturun
  2. Alışveriş listesindeki hangi öğelerin envanterinizde zaten bulunduğunu kontrol edin ve mantıksal vektör sonucunu yazdırın
  3. Envanterinizde bulunmayan alışveriş listesi öğelerini (satın almanız gereken öğeler) filtreleyin ve yazdırın
  4. Satın almanız gereken ve aynı zamanda indirimde olan öğeleri filtreleyin ve yazdırın

Örneğin, girdiler şunlarsa:

apple,banana,milk,bread,eggs
milk,butter,eggs,juice,apple
bread,juice,yogurt,butter

Çıktı şöyle olmalıdır:

[1]  TRUE FALSE  TRUE FALSE  TRUE
[1] "butter" "juice" 
[1] "butter" "juice"

Açıklama:

  • Envantere göre kontrol edilen alışveriş listesi: milk (TRUE), butter (FALSE), eggs (TRUE), juice (FALSE), apple (TRUE)
  • Envanterde OLMAYAN öğeler (satın alınması gerekenler): butter, juice
  • İndirimde olan satın alınacak öğeler: butter ve juice her ikisi de indirim listesinde

Bir vektörde OLMAYAN öğeleri bulmak için %in% ile birlikte ! operatörünü kullanın.

Kopya kağıdı

%in% operatörü, değerlerin bir vektör içinde olup olmadığını kontrol eder ve TRUE veya FALSE döndürür:

fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)

Çıktı:

[1] TRUE

Mantıksal bir vektör elde etmek için aynı anda birden fazla değeri kontrol edin:

fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)

Çıktı:

[1]  TRUE FALSE  TRUE

Elemanları filtrelemek için mantıksal indeksleme ile %in% kullanın:

numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])

Çıktı:

[1] 1 3 2

Bir vektörde OLMAYAN öğeleri bulmak için %in% ile birlikte ! kullanın:

items <- c("milk", "butter", "eggs")
inventory <- c("milk", "eggs")
print(items[!items %in% inventory])

Çıktı:

[1] "butter"

Kendin dene

# Girdiyi oku
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: Kodunuzu aşağıya yazın
# 1. strsplit() kullanarak virgülle ayrılmış her girdiden karakter vektörleri oluşturun
# 2. Alışveriş listesindeki hangi ürünlerin envanterinizde zaten bulunduğunu kontrol edin (%in% kullanın)
# 3. Envanterinizde bulunmayan alışveriş listesi ürünlerini filtreleyin (%in% ile ! kullanın)
# 4. Satın almanız gereken ve aynı zamanda indirimde olan ürünleri filtreleyin
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler