אינדוקס לוגי
חלק מהיחידה יסודות במסלול ה-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 אונליין