שינוי רשימות
חלק מהיחידה יסודות במסלול ה-R של Coddy. שיעור 73 מתוך 78.
עכשיו, כשאתה יודע ליצור רשימות ולגשת לאיברים שלהן, נלמד איך לשנות אותן. אפשר לשנות איברים קיימים, להוסיף איברים חדשים או להסיר איברים לחלוטין.
כדי לשנות איבר קיים, השתמש בסוגריים כפולים עם השמה:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"
print(my_list)פלט:
[[1]]
[1] 10
[[2]]
[1] "world"
[[3]]
[1] TRUEכדי להוסיף איבר חדש, פשוט הקצה ערך לאינדקס שעדיין לא קיים:
my_list <- list(10, "hello")
my_list[[3]] <- FALSE
print(my_list)פלט:
[[1]]
[1] 10
[[2]]
[1] "hello"
[[3]]
[1] FALSEכדי להסיר איבר, יש להקצות לו את NULL:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULL
print(my_list)פלט:
[[1]]
[1] 10
[[2]]
[1] TRUEשימו לב שלאחר הסרת האיבר השני, האיברים שנותרו זזים כדי למלא את הפער. האיבר שהיה במיקום 3 נמצא כעת במיקום 2.
אתגר
קלתקבלו שלוש שורות קלט:
- שלושה ערכים המופרדים בפסיקים כדי לאתחל רשימה (למשל,
50,hello,TRUE) - אינדקס וערך חדש המופרדים בפסיק לצורך שינוי (למשל,
2,goodbye) - האינדקס של האיבר להסרה (למשל,
3)
בצעו את הפעולות הבאות:
- צרו רשימה עם שלושת הערכים הראשוניים (המירו אותם לסוגים המתאימים: מספרי, תווי, לוגי)
- הדפיסו את הרשימה המקורית
- שנו את האיבר באינדקס שצוין לערך החדש (השאירו אותו כמחרוזת תווים)
- הדפיסו את הרשימה לאחר השינוי
- הוסיפו לרשימה איבר רביעי חדש עם הערך
999 - הדפיסו את הרשימה לאחר הוספת האיבר החדש
- הסירו את האיבר באינדקס שצוין (מהקלט השלישי)
- הדפיסו את הרשימה הסופית
לדוגמה, אם הקלט הוא:
100,world,FALSE
1,updated
2הפלט צריך להיות:
[[1]]
[1] 100
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[1]]
[1] "updated"
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[1]]
[1] "updated"
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[4]]
[1] 999
[[1]]
[1] "updated"
[[2]]
[1] FALSE
[[3]]
[1] 999הסבר:
- הרשימה המקורית: 100, "world", FALSE
- לאחר שינוי אינדקס 1: "updated", "world", FALSE
- לאחר הוספת האיבר הרביעי: "updated", "world", FALSE, 999
- לאחר הסרת אינדקס 2: "updated", FALSE, 999 (האיברים הנותרים זזים)
זכרו להשתמש בסוגריים מרובעים כפולים [[ ]] לצורך שינויים ולהשיב NULL כדי להסיר איברים.
נסו בעצמכם
# קראו את הקלט
con <- file("stdin", "r")
initial_values <- suppressWarnings(readLines(con, n = 1)) # שלושה ערכים מופרדים בפסיקים
modify_input <- suppressWarnings(readLines(con, n = 1)) # אינדקס וערך חדש
remove_index <- suppressWarnings(readLines(con, n = 1)) # האינדקס של האיבר שיש להסיר
close(con)
# נתחו את הערכים ההתחלתיים
values <- strsplit(initial_values, ",")[[1]]
val1 <- as.numeric(values[1])
val2 <- values[2]
val3 <- as.logical(values[3])
# נתחו את קלט השינוי
mod_parts <- strsplit(modify_input, ",")[[1]]
mod_index <- as.numeric(mod_parts[1])
mod_value <- mod_parts[2]
# נתחו את האינדקס של האיבר שיש להסיר
rem_index <- as.numeric(remove_index)
# TODO: כתבו את הקוד שלכם למטה
# 1. צרו רשימה עם שלושת הערכים ההתחלתיים (val1, val2, val3)
# 2. הדפיסו את הרשימה המקורית
# 3. שנו את האיבר באינדקס mod_index לערך mod_value
# 4. הדפיסו את הרשימה לאחר השינוי
# 5. הוסיפו איבר רביעי חדש עם הערך 999
# 6. הדפיסו את הרשימה לאחר ההוספה
# 7. הסירו את האיבר במיקום rem_index (השתמשו ב-NULL)
# 8. הדפיסו את הרשימה הסופיתהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורים חלק 2
אופרטורים לוגיים (AND, OR)אופרטורים לוגיים חלק 2 (NOT)חזרה – לוגיקה פשוטהלוגיקה וקטורית חלק 1לוגיקה וקטורית חלק 27מחשבון לחלוקת החשבון
הודעת פתיחהקבלת קלט מהמשתמש2משתנים וסוגי נתונים
סוג נתונים מספריסוג נתונים שלמיםסוג נתונים של תוויםסוג נתונים לוגיבדיקת סוגי נתוניםמוסכמות למתן שמותערכים חסרים: NAסיכום – יצירת משתנים8לולאות
לולאת forלולאת whileפקודת breakהמשך (continue)סיכום – עצרתיצירת רצפים (seq, :)לולאות מקוננותסיכום – קלט דינמי3אופרטורים חלק 1
אופרטורים אריתמטייםחלוקת מספרים שלמים ומודולואופרטורי השמהחזרה – חשבון פשוטאופרטורי השוואה6קלט/פלט בסיסי
הדפסת פלטחתול כפלטפלט עם משתניםקריאת קלט באמצעות readline()יסודות המרת טיפוסיםחזרה – מחשבון גילחזרה – אמת או שקר9פונקציות
הכרזה על פונקציהארגומנטים של פונקציהערכי החזרהסיכום – פונקציית סיגמאסיכום – פונקציית אימותערכי ברירת מחדל לפרמטריםתרגלו בעצמכם: קומפיילר R אונליין