הפונקציה switch()
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-R של Coddy. שיעור 47 מתוך 64.
switch(x, name = value, ...) משווה את הטקסט x לשמות ומחזירה את הערך של השם שתואם. היא מחליפה שרשרת ארוכה של השוואות else if מול אותו משתנה:
size <- "m"
price <- switch(size, s = 2.5, m = 3, l = 3.5)
print(price)פלט:
[1] 3ערך אחרון ללא שם הוא ברירת המחדל, והוא משמש כשאין התאמה. ללא ברירת מחדל, קריאה ל־switch() שאין לה התאמה מחזירה NULL בלי להציג דבר:
day <- "fri"
print(switch(day, sat = "rest", sun = "rest", "work"))
print(is.null(switch("x", a = 1)))פלט:
[1] "work"
[1] TRUEערך ריק גורם למעבר לערך הבא, כך שכמה שמות יכולים להחזיר אותה תוצאה:
kind <- function(day) switch(day, sat = , sun = "weekend", "weekday")
print(kind("sun"))
print(kind("tue"))פלט:
[1] "weekend"
[1] "weekday"הערכים יכולים להיות בלוקים שלמים של קוד בתוך סוגריים מסולסלים, והתוצאה היא הביטוי האחרון בבלוק שרץ:
area <- function(shape, a, b = a) {
switch(shape,
square = a^2,
rect = a * b,
circle = {
r <- a / 2
round(pi * r^2, 2)
},
NA)
}
print(area("rect", 3, 4))
print(area("circle", 10))פלט:
[1] 12
[1] 78.54אתגר
קלהשלימו את calculate(a, op, b). op הוא אחד מאלה: plus, minus, times ו־over. החזירו את התוצאה של החלתו על a ועל b, או unknown operation עבור כל ערך אחר של op. חלוקה באפס מחזירה cannot divide by zero.
הקוד שסופק קורא את a, את op ואת b (אחד בכל שורה) ומדפיס את הערך שהוחזר.
נסו בעצמכם
calculate <- function(a, op, b) {
# כתבו את הקוד שלכם כאן
"unknown operation"
}
# קוד קלט/פלט שסופק: השאירו אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
cat(calculate(as.numeric(input[1]), input[2], as.numeric(input[3])), sep = "\n")
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
תת־מחרוזות עם substr()עיצוב עם sprintf()פיצול וחיבורחיפוש במחרוזותהחלפת טקסטסיכום – בונה שמות משתמש4מטריצות
יצירת מטריצותאינדוקס מטריצותסיכומי שורות ועמודותאריתמטיקה של מטריצותסיכום – תרשים מקומות ישיבה10זרימת בקרה מתקדמת
הפונקציה switch()ifelse() וקטוריrepeat ו־breakפונקציות רקורסיביותסיכום – מסווג ציוניםתרגלו בעצמכם: קומפיילר R אונליין