אינדוקס לוגי
חלק מהיחידה יסודות במסלול ה-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 50R שומר רק את האיברים שבהם הווקטור הלוגי הוא TRUE. הגישה הזאת נקייה הרבה יותר מכתיבת לולאות לסינון נתונים. אפשר לשלב תנאים באמצעות אופרטורים לוגיים:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])פלט:
[1] 20 30 40אינדוקס לוגי הוא אחת מהתכונות החזקות ביותר של R לעיבוד נתונים, והוא מאפשר לך לסנן מערכי נתונים באמצעות ביטויים פשוטים וקריאים.
אתגר
קלתקבלו שתי שורות קלט:
- רשימת מספרים המופרדים בפסיקים (לדוגמה,
15,42,8,67,23,91,34,12,56) - שני ערכי סף המופרדים בפסיק ומייצגים טווח (לדוגמה,
20,60)
בעזרת אינדוקס לוגי:
- צרו וקטור מספרי מתוך המספרים המופרדים בפסיקים
- חלצו והדפיסו את כל האיברים שקטנים מ־ערך הסף הראשון (הגבול התחתון)
- חלצו והדפיסו את כל האיברים שגדולים מ־ערך הסף השני (הגבול העליון)
- חלצו והדפיסו את כל האיברים שנמצאים בתוך הטווח (גדולים או שווים לערך הסף הראשון וגם קטנים או שווים לערך הסף השני)
לדוגמה, אם הקלט הוא:
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. השתמשו באינדוקס לוגי עם האופרטור & כדי לחלץ איברים בטווח (כולל הגבולות) ולהדפיס אותםהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורים חלק 2
אופרטורים לוגיים (AND, OR)אופרטורים לוגיים חלק 2 (NOT)חזרה – לוגיקה פשוטהלוגיקה וקטורית חלק 1לוגיקה וקטורית חלק 27מחשבון לחלוקת החשבון
הודעת פתיחהקבלת קלט מהמשתמש2משתנים וסוגי נתונים
סוג נתונים מספריסוג נתונים שלמיםסוג נתונים של תוויםסוג נתונים לוגיבדיקת סוגי נתוניםמוסכמות למתן שמותערכים חסרים: NAסיכום – יצירת משתנים8לולאות
לולאת forלולאת whileפקודת breakהמשך (continue)סיכום – עצרתיצירת רצפים (seq, :)לולאות מקוננותסיכום – קלט דינמי3אופרטורים חלק 1
אופרטורים אריתמטייםחלוקת מספרים שלמים ומודולואופרטורי השמהחזרה – חשבון פשוטאופרטורי השוואה6קלט/פלט בסיסי
הדפסת פלטחתול כפלטפלט עם משתניםקריאת קלט באמצעות readline()יסודות המרת טיפוסיםחזרה – מחשבון גילחזרה – אמת או שקר9פונקציות
הכרזה על פונקציהארגומנטים של פונקציהערכי החזרהסיכום – פונקציית סיגמאסיכום – פונקציית אימותערכי ברירת מחדל לפרמטריםתרגלו בעצמכם: קומפיילר R אונליין