גישה לאיברי רשימה
חלק מהיחידה יסודות במסלול ה-R של Coddy. שיעור 72 מתוך 78.
ברשימות משתמשים בתחביר שונה לגישה לאיברים בהשוואה לווקטורים. ההבדל העיקרי הוא בין סוגריים מרובעים יחידים [ ] לסוגריים מרובעים כפולים [[ ]].
סוגריים מרובעים כפולים שולפים את האיבר עצמו מתוך הרשימה:
my_list <- list(42, "hello", TRUE)
print(my_list[[1]])פלט:
[1] 42סוגריים יחידים מחזירים תת־רשימה שמכילה את האיבר, ולא את האיבר עצמו:
my_list <- list(42, "hello", TRUE)
print(my_list[1])פלט:
[[1]]
[1] 42ההבחנה הזאת חשובה כשרוצים לעבוד עם הערך עצמו. אם איבר ברשימה הוא וקטור, סוגריים כפולים מאפשרים לגשת אליו ישירות ואז להשתמש באינדוקס של וקטור:
my_list <- list(c(10, 20, 30), "text")
print(my_list[[1]][2])פלט:
[1] 20כאן, my_list[[1]] מאחזר את הווקטור, ו-[2] ניגש לאיבר השני שלו. זכרו: השתמשו ב-[[ ]] כשאתם צריכים את התוכן עצמו, וב-[ ] כשרוצים רשימה קטנה יותר.
אתגר
קלתקבלו שתי שורות קלט:
- שלושה ערכים מסוגים שונים, מופרדים בפסיקים (לדוגמה,
100,hello,TRUE) - רשימת מספרים המופרדים בפסיקים, המייצגים וקטור שיישמר כאיבר הרביעי (לדוגמה,
5,10,15,20)
בצעו את הפעולות הבאות:
- צרו רשימה עם ארבעה איברים: הערך המספרי, הטקסט, הערך הלוגי ווקטור המספרים
- השתמשו בסוגריים מרובעים כפולים כדי לחלץ ולהדפיס את האיבר השני (ערך הטקסט)
- השתמשו בסוגריים מרובעים יחידים כדי לחלץ את האיבר השלישי ולהדפיס את התוצאה (שימו לב להבדל בפורמט הפלט)
- גשו לווקטור השמור באיבר הרביעי באמצעות סוגריים מרובעים כפולים, ואז חלצו והדפיסו את הערך השלישי שלו באמצעות אינדוקס של וקטור
- הדפיסו את סכום כל המספרים באיבר הרביעי (גשו לווקטור באמצעות סוגריים מרובעים כפולים והשתמשו ב-
sum())
לדוגמה, אם הקלט הוא:
42,world,FALSE
8,16,24,32,40הפלט צריך להיות:
[1] "world"
[[1]]
[1] FALSE
[1] 24
[1] 120הסבר:
my_list[[2]]מחלץ את ערך הטקסט עצמו: "world"my_list[3]מחזיר תת-רשימה שמכילה את FALSE (שימו לב ל-[[1]]בפלט)my_list[[4]][3]ניגש לווקטור ואז מקבל את האיבר השלישי שלו: 24sum(my_list[[4]])מחשב 8+16+24+32+40 = 120
נסו בעצמכם
# קראו את הקלט
con <- file("stdin", "r")
input1 <- suppressWarnings(readLines(con, n = 1)) # שורה ראשונה: שלושה ערכים המופרדים בפסיקים
input2 <- suppressWarnings(readLines(con, n = 1)) # שורה שנייה: מספרים המופרדים בפסיקים עבור וקטור
close(con)
# פצלו את שורת הקלט הראשונה לערכים נפרדים
values <- strsplit(input1, ",")[[1]]
numeric_val <- as.numeric(values[1])
text_val <- values[2]
logical_val <- as.logical(values[3])
# פצלו את שורת הקלט השנייה לווקטור מספרי
vector_val <- as.numeric(strsplit(input2, ",")[[1]])
# TODO: כתבו את הקוד שלכם למטה
# 1. צרו רשימה עם ארבעה איברים: numeric_val, text_val, logical_val ו־vector_val
# 2. השתמשו בסוגריים מרובעים כפולים [[ ]] כדי לחלץ ולהדפיס את האיבר השני
# 3. השתמשו בסוגריים מרובעים יחידים [ ] כדי לחלץ את האיבר השלישי ולהדפיס אותו
# 4. גשו לאיבר הרביעי באמצעות סוגריים מרובעים כפולים, ואז חלצו את הערך השלישי שלו
# 5. הדפיסו את סכום כל המספרים באיבר הרביעיהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורים חלק 2
אופרטורים לוגיים (AND, OR)אופרטורים לוגיים חלק 2 (NOT)חזרה – לוגיקה פשוטהלוגיקה וקטורית חלק 1לוגיקה וקטורית חלק 27מחשבון לחלוקת החשבון
הודעת פתיחהקבלת קלט מהמשתמש2משתנים וסוגי נתונים
סוג נתונים מספריסוג נתונים שלמיםסוג נתונים של תוויםסוג נתונים לוגיבדיקת סוגי נתוניםמוסכמות למתן שמותערכים חסרים: NAסיכום – יצירת משתנים8לולאות
לולאת forלולאת whileפקודת breakהמשך (continue)סיכום – עצרתיצירת רצפים (seq, :)לולאות מקוננותסיכום – קלט דינמי3אופרטורים חלק 1
אופרטורים אריתמטייםחלוקת מספרים שלמים ומודולואופרטורי השמהחזרה – חשבון פשוטאופרטורי השוואה6קלט/פלט בסיסי
הדפסת פלטחתול כפלטפלט עם משתניםקריאת קלט באמצעות readline()יסודות המרת טיפוסיםחזרה – מחשבון גילחזרה – אמת או שקר9פונקציות
הכרזה על פונקציהארגומנטים של פונקציהערכי החזרהסיכום – פונקציית סיגמאסיכום – פונקציית אימותערכי ברירת מחדל לפרמטריםתרגלו בעצמכם: קומפיילר R אונליין