Menu
CoddyTech

אינדוקס לוגי

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

במקום לציין מיקומים מדויקים, אפשר להשתמש בווקטור לוגי כדי לבחור איברים. הטכניקה הזאת, שנקראת אינדוקס לוגי, מאפשרת לסנן וקטור לפי תנאים ולא לפי מיקומים.

כשמחילים השוואה על וקטור, R מחזירה וקטור לוגי באותו אורך:

numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)

פלט:

[1] FALSE FALSE  TRUE  TRUE  TRUE

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

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])

פלט:

[1] 30 40 50

R שומר רק את האיברים שבהם הווקטור הלוגי הוא TRUE. הגישה הזאת נקייה הרבה יותר מכתיבת לולאות לסינון נתונים. אפשר לשלב תנאים באמצעות אופרטורים לוגיים:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])

פלט:

[1] 20 30 40

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

challenge icon

אתגר

קל

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

  1. רשימת מספרים המופרדים בפסיקים (לדוגמה, 15,42,8,67,23,91,34,12,56)
  2. שני ערכי סף המופרדים בפסיק ומייצגים טווח (לדוגמה, 20,60)

בעזרת אינדוקס לוגי:

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

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

5,25,10,45,60,15,80,35,50
20,50

הפלט אמור להיות:

[1]  5 10 15
[1] 60 80
[1] 25 45 35 50

הסבר:

  • איברים הקטנים מ־20: 5, 10, 15
  • איברים הגדולים מ־50: 60, 80
  • איברים שבין 20 ל־50 (כולל): 25, 45, 35, 50

השתמשו באופרטור & כדי לשלב תנאים עבור סינון לפי הטווח.

נסו בעצמכם

# קראו את הקלט
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# המירו את המספרים המופרדים בפסיקים לווקטור מספרי
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))

# המירו את ערכי הסף
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]

# TODO: כתבו את הקוד שלכם למטה
# 1. השתמשו באינדוקס לוגי כדי לחלץ איברים הקטנים מ־lower_bound ולהדפיס אותם
# 2. השתמשו באינדוקס לוגי כדי לחלץ איברים הגדולים מ־upper_bound ולהדפיס אותם
# 3. השתמשו באינדוקס לוגי עם האופרטור & כדי לחלץ איברים בטווח (כולל הגבולות) ולהדפיס אותם
quiz iconבחנו את עצמכם

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

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

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