האופרטור %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% שימושי במיוחד לאימות קלט מהמשתמש או לסינון נתונים על סמך רשימה מוגדרת מראש של ערכים מותרים.
אתגר
קלתקבלו שלוש שורות קלט:
- רשימה של פריטים במלאי שלך, מופרדים בפסיקים (למשל,
apple,banana,milk,bread,eggs,cheese) - רשימה של פריטים ברשימת הקניות שלך, מופרדים בפסיקים (למשל,
milk,butter,eggs,juice) - רשימה של פריטים שבמבצע, מופרדים בפסיקים (למשל,
bread,juice,yogurt)
באמצעות האופרטור %in%:
- צרו וקטורים של תווים מכל אחד מהקלטים המופרדים בפסיקים
- בדקו אילו פריטים מרשימת הקניות כבר נמצאים במלאי שלכם והדפיסו את התוצאה כווקטור לוגי
- סננו והדפיסו את הפריטים מרשימת הקניות שאינם נמצאים במלאי שלכם (פריטים שעליכם לקנות)
- סננו והדפיסו את הפריטים שעליכם לקנות ושנמצאים גם במבצע
לדוגמה, אם הקלט הוא:
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. סננו את הפריטים שאתם צריכים לקנות ושגם נמצאים במבצעהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורים חלק 2
אופרטורים לוגיים (AND, OR)אופרטורים לוגיים חלק 2 (NOT)חזרה – לוגיקה פשוטהלוגיקה וקטורית חלק 1לוגיקה וקטורית חלק 27מחשבון לחלוקת החשבון
הודעת פתיחהקבלת קלט מהמשתמש2משתנים וסוגי נתונים
סוג נתונים מספריסוג נתונים שלמיםסוג נתונים של תוויםסוג נתונים לוגיבדיקת סוגי נתוניםמוסכמות למתן שמותערכים חסרים: NAסיכום – יצירת משתנים8לולאות
לולאת forלולאת whileפקודת breakהמשך (continue)סיכום – עצרתיצירת רצפים (seq, :)לולאות מקוננותסיכום – קלט דינמי3אופרטורים חלק 1
אופרטורים אריתמטייםחלוקת מספרים שלמים ומודולואופרטורי השמהחזרה – חשבון פשוטאופרטורי השוואה6קלט/פלט בסיסי
הדפסת פלטחתול כפלטפלט עם משתניםקריאת קלט באמצעות readline()יסודות המרת טיפוסיםחזרה – מחשבון גילחזרה – אמת או שקר9פונקציות
הכרזה על פונקציהארגומנטים של פונקציהערכי החזרהסיכום – פונקציית סיגמאסיכום – פונקציית אימותערכי ברירת מחדל לפרמטריםתרגלו בעצמכם: קומפיילר R אונליין