העברת פונקציות
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-R של Coddy. שיעור 28 מתוך 64.
פונקציה יכולה לקבל פונקציה אחרת כארגומנט ולקרוא לה. apply_twice() שלהלן פועלת עם כל פונקציה שמקבלת ארגומנט אחד:
apply_twice <- function(f, x) f(f(x))
print(apply_twice(\(x) x + 3, 10))
print(apply_twice(toupper, "ok"))פלט:
[1] 16
[1] "OK"פונקציות מובנות כגון sum, max או toupper הן גם ערכים, לכן מעבירים אותן לפי שמן, ללא סוגריים. עם סוגריים, הן היו מופעלות במקום זאת:
summarize <- function(xs, how) how(xs)
print(summarize(c(4, 9, 2), max))
print(summarize(c(4, 9, 2), sum))פלט:
[1] 9
[1] 15פונקציה שמקבלת פרדיקט, פונקציה שמחזירה TRUE או FALSE, יכולה לספור או לבחור ערכים לפי כל כלל:
count_if <- function(xs, keep) {
n <- 0
for (x in xs) if (keep(x)) n <- n + 1
n
}
print(count_if(c(3, 8, 10, 5), \(x) x %% 2 == 0))
print(count_if(c(3, 8, 10, 5), \(x) x > 4))פלט:
[1] 2
[1] 3הקורא מחליט על ההתנהגות, והפונקציה מספקת את הלולאה, כך שפונקציה אחת מתאימה למקרים רבים:
transform_each <- function(xs, f) {
out <- c()
for (x in xs) out <- c(out, f(x))
out
}
print(transform_each(1:4, \(x) x * 10))
print(transform_each(c("a", "b"), toupper))פלט:
[1] 10 20 30 40
[1] "A" "B"אתגר
קלהשלימו את apply_n(f, x, n). קראו ל־f עם x, ואז עם התוצאה, בסך הכול n פעמים, והחזירו את הערך הסופי. כאשר n הוא 0, החזירו את x ללא שינוי.
הקוד שסופק מגדיר שלוש פונקציות: double, inc ו־half. הוא קורא את השם של אחת מהן, את ערך ההתחלה ואת n, ומדפיס את התוצאה של apply_n().
נסו בעצמכם
apply_n <- function(f, x, n) {
# כתבו את הקוד שלכם כאן
x
}
# קוד קלט/פלט שסופק: השאירו אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
ops <- list(double = \(x) x * 2, inc = \(x) x + 1, half = \(x) x / 2)
cat(apply_n(ops[[input[1]]], as.numeric(input[2]), as.numeric(input[3])), sep = "\n")
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
תת־מחרוזות עם substr()עיצוב עם sprintf()פיצול וחיבורחיפוש במחרוזותהחלפת טקסטסיכום – בונה שמות משתמש4מטריצות
יצירת מטריצותאינדוקס מטריצותסיכומי שורות ועמודותאריתמטיקה של מטריצותסיכום – תרשים מקומות ישיבהתרגלו בעצמכם: קומפיילר R אונליין