Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الدوال المخصصة

الدرس 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 تعني أن الطالب هو الثاني في الترتيب، وهكذا.
    • لإيجاد الترتيب (rank) استخدم order(): order(order(mean_col, decreasing = TRUE))

جرّب بنفسك

# قراءة المدخلات
con <- file("stdin", "r")
input_data <- readLines(con)
close(con)

# معالجة بيانات المدخلات وتحويلها إلى إطار بيانات (data frame)
data <- read.csv(text = input_data, header = TRUE, stringsAsFactors = FALSE)

# تعريف دالة mean_score
mean_score <- function(data) {
  # TODO: اكتب كودك هنا
  # حساب المتوسط لجميع المواد

  return(result)
}

# TODO: اكتب كودك هنا
# إنشاء عمود جديد باسم student_mean يحتوي على متوسط الدرجات.
# إنشاء عمود جديد باسم is_above_mean يحتوي على TRUE أو FALSE إذا كان الطالب فوق أو تحت المتوسط.
# إنشاء عمود باسم rank يحتوي على ترتيب كل طالب بالنسبة للآخرين بناءً على متوسطهم. على سبيل المثال، 1 يعني أن الطالب هو الأفضل، 2 يعني أن الطالب هو الثاني، وهكذا.

# طباعة النتيجة
print(data)

جميع دروس معالجة البيانات في R