تمرير الدوال
جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 28 من 64.
يمكن للدالة أن تتلقى دالة أخرى كوسيط وتستدعيها. تعمل apply_twice() أدناه مع أي دالة ذات وسيط واحد:
apply_twice <- function(f, x) f(f(x))
print(apply_twice(\(x) x + 3, 10))
print(apply_twice(toupper, "ok"))الناتج:
[1] 16
[1] "OK"الدوال المضمّنة مثل sum أو max أو toupper هي قيم أيضًا، لذا مرّرها باسمها من دون أقواس. أما مع الأقواس فسيتم استدعاؤها بدلًا من ذلك:
summarize <- function(xs, how) how(xs)
print(summarize(c(4, 9, 2), max))
print(summarize(c(4, 9, 2), sum))الناتج:
[1] 9
[1] 15يمكن لدالة تتلقى مُرشِّحًا، أي دالة تُعيد TRUE أو FALSE، أن تعدّ القيم أو تختارها وفقًا لأي قاعدة:
count_if <- function(xs, keep) {
n <- 0
for (x in xs) if (keep(x)) n <- n + 1
n
}
print(count_if(c(3, 8, 10, 5), \(x) x %% 2 == 0))
print(count_if(c(3, 8, 10, 5), \(x) x > 4))الناتج:
[1] 2
[1] 3يحدّد المستدعي السلوك وتوفّر الدالة الحلقة، لذا تغطي دالة واحدة حالات كثيرة:
transform_each <- function(xs, f) {
out <- c()
for (x in xs) out <- c(out, f(x))
out
}
print(transform_each(1:4, \(x) x * 10))
print(transform_each(c("a", "b"), toupper))الناتج:
[1] 10 20 30 40
[1] "A" "B"التحدي
سهلأكمل apply_n(f, x, n). استدعِ f على x، ثم على النتيجة، ما مجموعه n مرات، وأعِد القيمة النهائية. عندما تكون قيمة n هي 0، أعد x دون تغيير.
يعرّف الكود المُقدَّم ثلاث دوال، هي double وinc وhalf. يقرأ اسم إحداها، وقيمة البداية وn، ويطبع نتيجة apply_n().
جرّب بنفسك
apply_n <- function(f, x, n) {
# اكتب الكود الخاص بك هنا
x
}
# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
ops <- list(double = \(x) x * 2, inc = \(x) x + 1, half = \(x) x / 2)
cat(apply_n(ops[[input[1]]], as.numeric(input[2]), as.numeric(input[3])), sep = "\n")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهمتدرّب بنفسك: مترجم R عبر الإنترنت