Menu
Coddy logo textTech

האופרטור %in%

חלק מהיחידה יסודות במסלול ה-R של Coddy. שיעור 70 מתוך 78.

לפעמים צריך לבדוק אם ערכים קיימים בתוך וקטור. האופרטור %in% מספק דרך ברורה לבדוק שייכות, ומחזיר TRUE עבור כל איבר שתואם, ו־FALSE אחרת.

התחביר הבסיסי בודק אם ערכים בצד שמאל קיימים בווקטור שבצד ימין:

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

פלט:

[1] TRUE

אפשר גם לבדוק כמה ערכים בבת אחת. האופרטור מחזיר וקטור לוגי עם תוצאה אחת עבור כל ערך שנבדק:

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

פלט:

[1]  TRUE FALSE  TRUE

הדבר הופך את %in% למושלם לסינון. בשילוב עם אינדוקס לוגי, אפשר לחלץ איברים ששייכים לקבוצה מסוימת:

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

פלט:

[1] 1 3 2

האופרטור %in% שימושי במיוחד לאימות קלט מהמשתמש או לסינון נתונים על סמך רשימה מוגדרת מראש של ערכים מותרים.

challenge icon

אתגר

קל

תקבלו שלוש שורות קלט:

  1. רשימה של פריטים במלאי שלך, מופרדים בפסיקים (למשל, apple,banana,milk,bread,eggs,cheese)
  2. רשימה של פריטים ברשימת הקניות שלך, מופרדים בפסיקים (למשל, milk,butter,eggs,juice)
  3. רשימה של פריטים שבמבצע, מופרדים בפסיקים (למשל, bread,juice,yogurt)

באמצעות האופרטור %in%:

  1. צרו וקטורים של תווים מכל אחד מהקלטים המופרדים בפסיקים
  2. בדקו אילו פריטים מרשימת הקניות כבר נמצאים במלאי שלכם והדפיסו את התוצאה כווקטור לוגי
  3. סננו והדפיסו את הפריטים מרשימת הקניות שאינם נמצאים במלאי שלכם (פריטים שעליכם לקנות)
  4. סננו והדפיסו את הפריטים שעליכם לקנות ושנמצאים גם במבצע

לדוגמה, אם הקלט הוא:

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

הפלט צריך להיות:

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

הסבר:

  • בדיקת רשימת הקניות מול המלאי: milk (TRUE), butter (FALSE), eggs (TRUE), juice (FALSE), apple (TRUE)
  • פריטים שאינם במלאי (שצריך לקנות): butter, juice
  • פריטים שיש לקנות ונמצאים במבצע: butter ו-juice נמצאים שניהם ברשימת המבצעים

השתמשו באופרטור ! יחד עם %in% כדי למצוא פריטים שאינם נמצאים בווקטור.

נסו בעצמכם

# קראו את הקלט
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: כתבו את הקוד שלכם למטה
# 1. צרו וקטורים של מחרוזות מכל קלט המופרד בפסיקים באמצעות strsplit()
# 2. בדקו אילו פריטים מרשימת הקניות כבר נמצאים במלאי (השתמשו ב-%in%)
# 3. סננו את הפריטים מרשימת הקניות שאינם נמצאים במלאי (השתמשו ב-! עם %in%)
# 4. סננו את הפריטים שאתם צריכים לקנות ושגם נמצאים במבצע
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר R אונליין