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