שימוש ב־seq_along()
חלק מהיחידה יסודות במסלול ה-R של Coddy. שיעור 64 מתוך 78.
לפעמים צריך גם את הערך של האיבר וגם את המיקום שלו בווקטור. אף שמעבר ישיר על האיברים הוא נקי, הוא לא נותן לך גישה לאינדקס. הפונקציה seq_along() פותרת זאת על ידי יצירת רצף של אינדקסים לכל וקטור.
הפונקציה seq_along() מחזירה רצף מ-1 ועד לאורך המערך:
fruits <- c("apple", "banana", "cherry")
print(seq_along(fruits))פלט:
[1] 1 2 3על ידי מעבר בלולאה על האינדקסים האלה, אפשר לגשת גם למיקום וגם לערך:
fruits <- c("apple", "banana", "cherry")
for (i in seq_along(fruits)) {
cat(i, ":", fruits[i], "\n")
}פלט:
1 : apple
2 : banana
3 : cherryהגישה הזאת שימושית במיוחד כשצריך לשנות איברים במיקומים מסוימים או להשוות בין איברים לשכניהם. שימוש ב-seq_along() בטוח יותר מ-1:length(vec), כי הוא מטפל נכון בווקטורים ריקים ומחזיר רצף ריק במקום 1:0.
אתגר
קלתקבלו שורת קלט אחת המכילה מספרים המופרדים בפסיקים (למשל, 10,20,30,40,50).
השתמשו ב־seq_along() כדי לעבור על המערך עם האינדקסים:
- צרו מערך מתוך הקלט המופרד בפסיקים
- עברו על המערך באמצעות
seq_along()כדי לקבל גם את האינדקס וגם את הערך - עבור כל איבר, הדפיסו את האינדקס, את הערך ואת הסכום המצטבר עד לאותה נקודה (סכום כל האיברים מהמיקום 1 ועד למיקום הנוכחי)
השתמשו ב־cat() עם התבנית: Position X: VALUE (Running total: TOTAL) ואחריה ירידת שורה.
לדוגמה, אם הקלט הוא:
5,10,15,20הפלט צריך להיות:
Position 1: 5 (Running total: 5)
Position 2: 10 (Running total: 15)
Position 3: 15 (Running total: 30)
Position 4: 20 (Running total: 50)הסבר: במיקום 1, הערך הוא 5 והסכום המצטבר הוא 5. במיקום 2, הערך הוא 10 והסכום המצטבר הוא 5+10=15. במיקום 3, הערך הוא 15 והסכום המצטבר הוא 5+10+15=30, וכן הלאה.
רמז: השתמשו ב־sum(vector[1:i]) כדי לחשב את הסכום המצטבר עד למיקום i.
נסו בעצמכם
# קראו את הקלט
con <- file("stdin", "r")
input_line <- suppressWarnings(readLines(con, n = 1))
close(con)
# המירו מחרוזת המופרדת בפסיקים לווקטור מספרי
numbers <- as.numeric(strsplit(input_line, ",")[[1]])
# TODO: כתבו את הקוד שלכם למטה
# השתמשו ב-seq_along() כדי לעבור על הווקטור
# בכל מיקום, הדפיסו את האינדקס, הערך והסכום המצטבר
# השתמשו ב-cat() בפורמט: Position X: VALUE (Running total: TOTAL)\nהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורים חלק 2
אופרטורים לוגיים (AND, OR)אופרטורים לוגיים חלק 2 (NOT)חזרה – לוגיקה פשוטהלוגיקה וקטורית חלק 1לוגיקה וקטורית חלק 27מחשבון לחלוקת החשבון
הודעת פתיחהקבלת קלט מהמשתמש2משתנים וסוגי נתונים
סוג נתונים מספריסוג נתונים שלמיםסוג נתונים של תוויםסוג נתונים לוגיבדיקת סוגי נתוניםמוסכמות למתן שמותערכים חסרים: NAסיכום – יצירת משתנים8לולאות
לולאת forלולאת whileפקודת breakהמשך (continue)סיכום – עצרתיצירת רצפים (seq, :)לולאות מקוננותסיכום – קלט דינמי3אופרטורים חלק 1
אופרטורים אריתמטייםחלוקת מספרים שלמים ומודולואופרטורי השמהחזרה – חשבון פשוטאופרטורי השוואה6קלט/פלט בסיסי
הדפסת פלטחתול כפלטפלט עם משתניםקריאת קלט באמצעות readline()יסודות המרת טיפוסיםחזרה – מחשבון גילחזרה – אמת או שקר9פונקציות
הכרזה על פונקציהארגומנטים של פונקציהערכי החזרהסיכום – פונקציית סיגמאסיכום – פונקציית אימותערכי ברירת מחדל לפרמטרים12איטרציה על רצפים
איטרציה על איברי וקטורשימוש ב־seq_along()איטרציה על תווים (strsplitפונקציות לעיבוד מחרוזותתרגלו בעצמכם: קומפיילר R אונליין