إرجاع الدوال
جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 29 من 64.
يمكن للدالة أيضًا أن تُرجع دالة. تُرجع make_multiplier(3) دالةً جديدةً تضرب وسيطها في 3:
make_multiplier <- function(n) {
function(x) x * n
}
triple <- make_multiplier(3)
print(triple(5))
print(make_multiplier(10)(5))الناتج:
[1] 15
[1] 50تتذكر الدالة المُعادة القيم التي بُنيت بها. يُسمّى هذا الجمع بين دالة والمتغيرات المحيطة بها الإغلاق. ينشئ كل استدعاء للصانع إغلاقًا منفصلًا:
make_greeter <- function(greeting) {
function(name) paste0(greeting, ", ", name, "!")
}
hello <- make_greeter("Hello")
hola <- make_greeter("Hola")
print(hello("Ada"))
print(hola("Ada"))الناتج:
[1] "Hello, Ada!"
[1] "Hola, Ada!"تحوّل دالة الإنشاء بعض الإعدادات إلى أداة جاهزة للاستخدام، مثل محوّل بين الوحدات:
make_converter <- function(factor, offset = 0) {
function(x) x * factor + offset
}
c_to_f <- make_converter(1.8, 32)
km_to_miles <- make_converter(0.621)
print(c_to_f(100))
print(km_to_miles(10))الناتج:
[1] 212
[1] 6.21يمكن دمج الدوال في دوال جديدة. تُرجع compose(f, g) دالةً تُشغّل f ثم g:
compose <- function(f, g) function(x) g(f(x))
clean <- compose(trimws, toupper)
print(clean(" hi there "))الناتج:
[1] "HI THERE"التحدي
سهلأكمل make_formatter(prefix, digits). فهي تُرجع دالةً تأخذ رقمًا وتُرجع prefix متبوعًا بالرقم مع digits من المنازل العشرية: تُرجع make_formatter("$", 2)(3.5) القيمة $3.50.
تنسّق sprintf("%.*f", digits, x) قيمة x باستخدام digits من المنازل العشرية.
يقرأ الكود المُ supplied البادئة، وعدد المنازل العشرية، وقائمةً من الأرقام مفصولة بفواصل. ثم ينشئ منسّقًا واحدًا ويطبع نتيجته لكل رقم.
جرّب بنفسك
make_formatter <- function(prefix, digits) {
# اكتب الكود الخاص بك هنا
function(x) ""
}
# كود الإدخال/الإخراج المُزوَّد: أبقه كما هو
input <- suppressWarnings(readLines(file("stdin")))
fmt <- make_formatter(input[1], as.integer(input[2]))
for (x in as.numeric(strsplit(input[3], ",")[[1]])) cat(fmt(x), "\n", sep = "")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهمتدرّب بنفسك: مترجم R عبر الإنترنت