Menu
Coddy logo textTech

פונקציות מותאמות אישית

שיעור 14 מתוך 14 בקורס מניפולציה של נתונים ב-R של Coddy.

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

מבנה בסיסי של פונקציה מותאמת אישית

התחביר הבסיסי ליצירת פונקציה מותאמת אישית ב-R הוא:

function_name <- function(arg1, arg2, ...) {
  # גוף הפונקציה
  # פעולות המשתמשות ב־arg1, ב־arg2 וכו׳.
  return(result)
}

יצירת פונקציה מותאמת אישית פשוטה

בואו ניצור פונקציה פשוטה שמחשבת את אחוז הערכים החסרים בווקטור:

percent_missing <- function(x) {
  sum(is.na(x)) / length(x) * 100
}

# שימוש
data <- c(1, 2, NA, 4, NA, 6)
percent_missing(data)  # מחזיר: 33.33333

פונקציות עם כמה ארגומנטים

פונקציות מותאמות אישית יכולות לקבל כמה ארגומנטים, וכך לאפשר פעולות גמישות יותר:

scale_column <- function(df, column_name, min_val = 0, max_val = 1) {
  df[[column_name]] <- (df[[column_name]] - min(df[[column_name]], na.rm = TRUE)) / 
                       (max(df[[column_name]], na.rm = TRUE) - min(df[[column_name]], na.rm = TRUE))
  df[[column_name]] <- df[[column_name]] * (max_val - min_val) + min_val
  return(df)
}

# שימוש
df <- data.frame(x = 1:10, y = 11:20)
scaled_df <- scale_column(df, "x", 0, 100)

החזרת כמה ערכים

פונקציות יכולות להחזיר כמה ערכים באמצעות רשימה:

summarize_numeric <- function(x) {
  list(
    mean = mean(x, na.rm = TRUE),
    median = median(x, na.rm = TRUE),
    sd = sd(x, na.rm = TRUE)
  )
}

# שימוש
numbers <- c(1, 2, 3, 4, 5)
summary_stats <- summarize_numeric(numbers)

שימוש בפונקציות מותאמות אישית עם dplyr

פונקציות מותאמות אישית יכולות להיות שימושיות במיוחד בשילוב עם dplyr לעיבוד נתונים:

library(dplyr)

categorize_age <- function(age) {
  case_when(
    age < 18 ~ "Child",
    age < 65 ~ "Adult",
    TRUE ~ "Senior"
  )
}

# שימוש ב-dplyr
df <- data.frame(name = c("Alice", "Bob", "Charlie"), age = c(25, 72, 16))
df %>%
  mutate(age_category = categorize_age(age))
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

challenge icon

אתגר

בינוני

צרו פונקציה מותאמת אישית בשם mean_score שמחשבת את הציון הממוצע של כל תלמיד במערך נתונים של ציוני מבחנים של תלמידים.

כדי לחשב את הציון הממוצע בכל שורה, נשתמש בפונקציה rowwise(), ובהמשך נשתמש ב־ungroup() כדי להחזיר את הכול למצב הקודם. בדקו את הקוד שסופק.

בצעו את הפעולות הבאות:

  1. צרו עמודה חדשה בשם student_mean שמכילה את הציון הממוצע.
  2. צרו עמודה חדשה בשם is_above_mean שמכילה TRUE או FALSE, בהתאם לכך אם התלמיד נמצא מעל הממוצע או מתחתיו.
  3. צרו עמודה בשם rank שמכילה את המיקום של כל תלמיד ביחס לאחרים, על סמך הממוצע שלו. לדוגמה, 1 פירושו שהתלמיד הוא הטוב ביותר, 2 פירושו שהתלמיד הוא השני בטיבו, וכן הלאה.
    • כדי למצוא את הדירוג, השתמשו ב־order(): order(order(mean_col, decreasing = TRUE))

נסו בעצמכם

# קראו את הקלט
con <- file("stdin", "r")
input_data <- readLines(con)
close(con)

# עבדו את נתוני הקלט למסגרת נתונים
data <- read.csv(text = input_data, header = TRUE, stringsAsFactors = FALSE)

# הגדירו את הפונקציה mean_score
mean_score <- function(data) {
  # TODO: כתבו את הקוד שלכם כאן
  # חשבו את הממוצע של כל המקצועות

  return(result)
}

# TODOL כתבו את הקוד שלכם כאן
# צרו עמודה חדשה בשם student_mean שמכילה את הציון הממוצע.
# צרו עמודה חדשה בשם is_above_mean שמכילה TRUE או FALSE בהתאם לשאלה אם ציון התלמיד גבוה או נמוך מהממוצע.
# צרו עמודה בשם rank שמכילה את המיקום של כל תלמיד ביחס לאחרים לפי הממוצע שלו. לדוגמה, 1 פירושו שהתלמיד במקום הראשון, 2 פירושו שהתלמיד במקום השני, וכן הלאה.

# הדפיסו את התוצאה
print(data)

כל השיעורים ביחידה מניפולציה של נתונים ב-R

תרגלו בעצמכם: קומפיילר R אונליין