دروس الوحدة (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().
إظهار التلميح
استخدام الخط: double_value <- function(x) { return(x * 2) }
الحل متاح بعد 3 من المحاولات
قم بتعريف دالة باسم count_area تقبل وسيطتين: العرض والارتفاع. يجب أن تقوم الدالة بإرجاع منتجها باستخدام return().
إظهار التلميح
حدد الدالة باستخدام معلمات العرض والارتفاع، ثم قم بإرجاع العرض * الارتفاع.
الحل متاح بعد 3 من المحاولات
قم بتعريف دالة باسم account_tax تقبل مقدار الوسيطة المطلوبة ومعدل الوسيطة الاختياري بقيمة افتراضية تبلغ 0.22. إرجاع مبلغ المنتج * السعر.
إظهار التلميح
الولايات المتحدة الأمريكية: count_tax <- function(amount,rate = 0.22) { return(amount *rate) }
الحل متاح بعد 3 من المحاولات
حدد دالة باسمanalyst_vector تقبل المتجه v. يجب أن ترجع الدالة قائمة تحتوي على عنصرين بالاسم sum (مجموع المتجه، محسوبًا بـ sum(v)) وlen (طول المتجه، محسوبًا بالطول(v)).
إظهار التلميح
استخدم بناء الجملة: Analysis_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }
الحل متاح بعد 3 من المحاولات
بالنظر إلى المتجه v، استخدم الدالة sapply() مع دالة مجهولة لمضاعفة قيمة كل عنصر ثلاث مرات (ضربها في 3). احفظ النتيجة في المتغير ثلاث مرات.
إظهار التلميح
الاستخدام: ثلاث مرات <- sapply(v, function(x) x * 3)
الحل متاح بعد 3 من المحاولات