الانتقال إلى المحتوى الرئيسي
الوحدة 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().

جارٍ تحميل المحرر…
إظهار التلميح

استخدام الخط: double_value <- function(x) { return(x * 2) }

الحل متاح بعد 3 من المحاولات

تمرين#r.m3.l1.e2
المحاولات: 0جارٍ التحميل…

قم بتعريف دالة باسم count_area تقبل وسيطتين: العرض والارتفاع. يجب أن تقوم الدالة بإرجاع منتجها باستخدام return().

جارٍ تحميل المحرر…
إظهار التلميح

حدد الدالة باستخدام معلمات العرض والارتفاع، ثم قم بإرجاع العرض * الارتفاع.

الحل متاح بعد 3 من المحاولات

تمرين#r.m3.l1.e3
المحاولات: 0جارٍ التحميل…

قم بتعريف دالة باسم account_tax تقبل مقدار الوسيطة المطلوبة ومعدل الوسيطة الاختياري بقيمة افتراضية تبلغ 0.22. إرجاع مبلغ المنتج * السعر.

جارٍ تحميل المحرر…
إظهار التلميح

الولايات المتحدة الأمريكية: count_tax <- function(amount,rate = 0.22) { return(amount *rate) }

الحل متاح بعد 3 من المحاولات

تمرين#r.m3.l1.e4
المحاولات: 0جارٍ التحميل…

حدد دالة باسمanalyst_vector تقبل المتجه v. يجب أن ترجع الدالة قائمة تحتوي على عنصرين بالاسم sum (مجموع المتجه، محسوبًا بـ sum(v)) وlen (طول المتجه، محسوبًا بالطول(v)).

جارٍ تحميل المحرر…
إظهار التلميح

استخدم بناء الجملة: Analysis_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 من المحاولات