דילוג לתוכן המרכזי
מודול 3 · שיעור 1 מתוך 25/10 בקורס~12 min
שיעורי מודול (1/2)

פונקציות כתיבה

ב-R, פונקציות הן אזרחים מהשורה הראשונה (אובייקטים בפני עצמם) ומאפשרות לך לבנות את הקוד שלך לבלוקים מודולריים, ניתנים לשימוש חוזר ומאורגנים היטב.

הגדרת פונקציה

כדי להגדיר פונקציה, השתמש במילת המפתח function והקצה את האובייקט שנוצר למשתנה (שם הפונקציה) באמצעות אופרטור ההקצאה <-:

R
# Simple function definition
greet_user <- function() {
  print("Hello, User!")
}

# Invoking the function
greet_user()

פרמטרים וערכי החזרה

פונקציות יכולות לקבל פרמטר אחד או יותר. כדי להחזיר ערך במפורש, השתמש בפונקציה return(). אם return() מושמט, R יחזיר אוטומטית את הערך של הביטוי האחרון שהוערך בגוף הפונקציה.

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 ישתמש בערך ברירת המחדל:

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):

R
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) הקלאסי:

R
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

נסה זאת בעצמך

פעילות גופנית#r.m3.l1.e1
ניסיונות: 0טוען...

הגדר פונקציה בשם double_value שמקבלת ארגומנט יחיד x ומחזירה את הכפול שלו (x * 2) באמצעות return().

טוען עורך...
הצג רמז

Usa la sintassi: double_value <- function(x) { return(x * 2) }

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#r.m3.l1.e2
ניסיונות: 0טוען...

הגדר פונקציה בשם calculate_area שמקבלת שני ארגומנטים: רוחב וגובה. הפונקציה חייבת להחזיר את המוצר שלה באמצעות return().

טוען עורך...
הצג רמז

הגדר את הפונקציה עם פרמטרים רוחב וגובה, והחזר רוחב * גובה.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#r.m3.l1.e3
ניסיונות: 0טוען...

הגדר פונקציה בשם calculate_tax שמקבלת כמות ארגומנט נדרשת ושיעור ארגומנט אופציונלי עם ערך ברירת מחדל של 0.22. החזר את כמות המוצר * תעריף.

טוען עורך...
הצג רמז

ארה"ב: calculate_tax <- function(amount, rate = 0.22) { return(amount * rate) }

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#r.m3.l1.e4
ניסיונות: 0טוען...

הגדירו פונקציה בשם analyze_vector שמקבלת וקטור v. הפונקציה חייבת להחזיר רשימה המכילה שני אלמנטים בשם sum (סכום הווקטור, מחושב עם sum(v)) ו-len (אורך הווקטור, מחושב עם אורך(v)).

טוען עורך...
הצג רמז

השתמש בתחביר: analyze_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#r.m3.l1.e5
ניסיונות: 0טוען...

בהינתן הווקטור v, השתמש בפונקציה sapply() עם פונקציה אנונימית כדי לשלש את הערך של כל אלמנט (הכפלתו ב-3). שמור את התוצאה במשתנה משולש.

טוען עורך...
הצג רמז

השתמש: משולש <- sapply(v, function(x) x * 3)

הפתרון זמין לאחר 3 ניסיונות