ערכים ייחודיים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-R של Coddy. שיעור 12 מתוך 64.
ל־R אין טיפוס נפרד לקבוצה: קבוצה היא וקטור ללא ערכים חוזרים. unique() מסירה את הערכים החוזרים ומשאירה את ההופעה הראשונה של כל ערך, בסדר המקורי.
tags <- c("r", "stats", "r", "data", "stats")
print(unique(tags))
print(length(unique(tags)))פלט:
[1] "r" "stats" "data"
[1] 3duplicated() מחזירה TRUE עבור כל ערך שכבר הופיע קודם בווקטור. ההופעה הראשונה היא FALSE:
ids <- c(7, 3, 7, 9, 3)
print(duplicated(ids))
print(ids[duplicated(ids)])פלט:
[1] FALSE FALSE TRUE FALSE TRUE
[1] 7 3שתי הפונקציות משוות ערכים מדויקים, לכן "R" ו־"r" שונים. נרמלו תחילה את הטקסט כאשר אין חשיבות לאותיות גדולות וקטנות:
langs <- c("R", "python", "r", "Python")
print(length(unique(langs)))
print(unique(tolower(langs)))פלט:
[1] 4
[1] "r" "python"גם unique() פועלת על מספרים, ו-sort(unique(x)) מציגה את הערכים הייחודיים בסדר עולה. sum(duplicated(x)) סופרת כמה איברים מופיעים יותר מפעם אחת:
rolls <- c(4, 2, 6, 2, 4, 4)
print(sort(unique(rolls)))
print(sum(duplicated(rolls)))פלט:
[1] 2 4 6
[1] 3אתגר
קלהשלם את count_distinct(tags). החזר את מספר התגים השונים כאשר לא מתחשבים באותיות רישיות: R ו-r נספרים פעם אחת.
הקוד שסופק קורא את התגים כשורה המופרדת בפסיקים ומדפיס את המספר שהוחזר.
נסו בעצמכם
count_distinct <- function(tags) {
# כתבו כאן את הקוד שלכם
0
}
# קוד קלט/פלט שסופק: השאירו אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
cat(count_distinct(strsplit(input[1], ",")[[1]]), sep = "\n")
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
תת־מחרוזות עם substr()עיצוב עם sprintf()פיצול וחיבורחיפוש במחרוזותהחלפת טקסטסיכום – בונה שמות משתמש4מטריצות
יצירת מטריצותאינדוקס מטריצותסיכומי שורות ועמודותאריתמטיקה של מטריצותסיכום – תרשים מקומות ישיבהתרגלו בעצמכם: קומפיילר R אונליין