איטרציה על תווים (strsplit
חלק מהיחידה יסודות במסלול ה-R של Coddy. שיעור 65 מתוך 78.
מה אם צריך לעבד כל תו במחרוזת בנפרד? בניגוד לווקטורים, אי אפשר לעבור ישירות בלולאה על התווים של מחרוזת ב-R. הפונקציה strsplit() פותרת זאת באמצעות פיצול מחרוזת לווקטור של תווים.
הפונקציה strsplit() מקבלת שני ארגומנטים: המחרוזת לפיצול והמפריד. כדי לפצל לתווים בודדים, יש להשתמש במחרוזת ריקה "" כמפריד:
word <- "hello"
chars <- strsplit(word, "")[[1]]
print(chars)פלט:
[1] "h" "e" "l" "l" "o"שימו לב ל-[[1]] בסוף. הסיבה לכך היא ש-strsplit() מחזירה רשימה, ועלינו לחלץ את האיבר הראשון כדי לקבל את וקטור התווים שלנו. לאחר שהתווים נמצאים בווקטור, אפשר לעבור עליהם באמצעות הטכניקות שכבר למדתם:
word <- "R"
chars <- strsplit(word, "")[[1]]
for (char in chars) {
print(char)
}פלט:
[1] "R"הטכניקה הזו חיונית למשימות כמו ספירת תווים מסוימים, היפוך מחרוזות או אימות קלט תו אחר תו.
אתגר
קלתקבל שורת קלט אחת שמכילה מילה (למשל, programming).
השתמשו ב־strsplit() כדי לפצל את המחרוזת לתווים בודדים:
- פצלו את מילת הקלט לווקטור של תווים
- עברו בלולאה על כל תו בווקטור
- ספרו כמה פעמים האות
"a"מופיעה במילה (תוך הבחנה בין אותיות גדולות לקטנות) - הדפיסו כל תו בשורה משלו באמצעות
print() - לאחר הלולאה, הדפיסו את הספירה באמצעות
cat()בתבנית:Count of 'a': Xואחריה תו ירידת שורה
לדוגמה, אם הקלט הוא:
bananaהפלט אמור להיות:
[1] "b"
[1] "a"
[1] "n"
[1] "a"
[1] "n"
[1] "a"
Count of 'a': 3הסבר: המילה "banana" מפוצלת לתווים c("b", "a", "n", "a", "n", "a"). כל תו מודפס, והאות "a" מופיעה 3 פעמים.
נסו בעצמכם
# קראו את הקלט
con <- file("stdin", "r")
word <- suppressWarnings(readLines(con, n = 1))
# אתחלו מונה עבור האות 'a'
count_a <- 0
# TODO: כתבו את הקוד שלכם למטה
# 1. השתמשו ב-strsplit() כדי לפצל את המילה לתווים בודדים
# 2. עברו על כל תו בלולאה
# 3. הדפיסו כל תו באמצעות print()
# 4. ספרו כמה פעמים מופיעה 'a'
# הציגו את מספר ההופעות של 'a'
cat("Count of 'a': ", count_a, "\n", sep = "")השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
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 אונליין