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