שיעורי מודול (1/2)
פונקציות כתיבה
ב-R, פונקציות הן אזרחים מהשורה הראשונה (אובייקטים בפני עצמם) ומאפשרות לך לבנות את הקוד שלך לבלוקים מודולריים, ניתנים לשימוש חוזר ומאורגנים היטב.
הגדרת פונקציה
כדי להגדיר פונקציה, השתמש במילת המפתח function והקצה את האובייקט שנוצר למשתנה (שם הפונקציה) באמצעות אופרטור ההקצאה <-:
# Simple function definition
greet_user <- function() {
print("Hello, User!")
}
# Invoking the function
greet_user()פרמטרים וערכי החזרה
פונקציות יכולות לקבל פרמטר אחד או יותר. כדי להחזיר ערך במפורש, השתמש בפונקציה return(). אם return() מושמט, R יחזיר אוטומטית את הערך של הביטוי האחרון שהוערך בגוף הפונקציה.
# Function that adds two numbers and returns the result
add_numbers <- function(a, b) {
sum_result <- a + b
return(sum_result)
}
total <- add_numbers(5, 7)
print(total) # Prints 12ארגומנטים ברירת מחדל
אתה יכול לציין ערכי ברירת מחדל עבור פרמטרים של פונקציה. אם הארגומנט לא מסופק בעת הפעלת הפונקציה, R ישתמש בערך ברירת המחדל:
# The function uses a default discount rate of 10% (0.10)
apply_discount <- function(price, discount = 0.10) {
discounted_price <- price * (1 - discount)
return(discounted_price)
}
# Uses the default (10%)
print(apply_discount(100)) # Prints 90
# Specifies a custom discount (20%)
print(apply_discount(100, 0.20)) # Prints 80החזרת ערכים מרובים עם רשימות
מכיוון שפונקציה ב-R יכולה להחזיר רק אובייקט בודד ישירות דרך return(), אם אנחנו צריכים להחזיר ערכים מרובים (אולי מסוגים או אורכים שונים), נוכל לאגד אותם בתוך רשימה (list):
get_stats <- function(v) {
stats <- list(
mean_val = mean(v),
max_val = max(v)
)
return(stats)
}
results <- get_stats(c(10, 20, 30))
print(results$mean_val) # Prints 20פונקציות אנונימיות וsapply
פונקציות אנונימיות (פונקציות ללא שם המוגדר בשורה) שימושיות ביותר כאשר הן משולבות עם פונקציות כמו sapply() כדי להחיל טרנספורמציות מהירות על אלמנטים של וקטור או רשימה.
ב-R המודרני (מגרסה 4.1.0 ואילך), ניתן להגדיר פונקציות אנונימיות באמצעות תחביר הקיצור \(x) בנוסף ל-function(x) הקלאסי:
v <- c(1, 2, 3)
# Using sapply with a classic anonymous function
sapply(v, function(x) x^2) # 1 4 9
# Using sapply with shorthand syntax (R >= 4.1.0)
sapply(v, \(x) x^2) # 1 4 9נסה זאת בעצמך
הגדר פונקציה בשם double_value שמקבלת ארגומנט יחיד x ומחזירה את הכפול שלו (x * 2) באמצעות return().
הצג רמז
Usa la sintassi: double_value <- function(x) { return(x * 2) }
הפתרון זמין לאחר 3 ניסיונות
הגדר פונקציה בשם calculate_area שמקבלת שני ארגומנטים: רוחב וגובה. הפונקציה חייבת להחזיר את המוצר שלה באמצעות return().
הצג רמז
הגדר את הפונקציה עם פרמטרים רוחב וגובה, והחזר רוחב * גובה.
הפתרון זמין לאחר 3 ניסיונות
הגדר פונקציה בשם calculate_tax שמקבלת כמות ארגומנט נדרשת ושיעור ארגומנט אופציונלי עם ערך ברירת מחדל של 0.22. החזר את כמות המוצר * תעריף.
הצג רמז
ארה"ב: calculate_tax <- function(amount, rate = 0.22) { return(amount * rate) }
הפתרון זמין לאחר 3 ניסיונות
הגדירו פונקציה בשם analyze_vector שמקבלת וקטור v. הפונקציה חייבת להחזיר רשימה המכילה שני אלמנטים בשם sum (סכום הווקטור, מחושב עם sum(v)) ו-len (אורך הווקטור, מחושב עם אורך(v)).
הצג רמז
השתמש בתחביר: analyze_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }
הפתרון זמין לאחר 3 ניסיונות
בהינתן הווקטור v, השתמש בפונקציה sapply() עם פונקציה אנונימית כדי לשלש את הערך של כל אלמנט (הכפלתו ב-3). שמור את התוצאה במשתנה משולש.
הצג רמז
השתמש: משולש <- sapply(v, function(x) x * 3)
הפתרון זמין לאחר 3 ניסיונות