الدوال المجهولة
جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 27 من 64.
في R، الدالة هي قيمة مثل الرقم أو السلسلة النصية. تنشئ function(x) x * 2 دالةً من دون إعطائها اسمًا، وقيمة تعبيرها الأخير هي ما تُعيده:
double <- function(x) x * 2
print(double(21))
print((function(x) x + 1)(9))الناتج:
[1] 42
[1] 10أضافت R 4.1 صيغة مختصرة: \(x) تعني الشيء نفسه مثل function(x). استخدم الأقواس المعقوفة عندما يحتاج جسم الدالة إلى عدة أسطر:
square <- \(x) x^2
label <- function(x) {
size <- if (x > 10) "big" else "small"
paste(x, "is", size)
}
print(square(4))
print(label(12))الناتج:
[1] 16
[1] "12 is big"بما أن الدوال قيم، يمكن للقائمة أن تحتوي على عدة دوال تحت أسماء. ops[["inc"]] هي دالة، لذا فإن ops[["inc"]](5) يستدعيها:
ops <- list(inc = \(x) x + 1, neg = \(x) -x)
print(ops[["inc"]](5))
print(names(ops))الناتج:
[1] 6
[1] "inc" "neg"يمكن للدالة أن تتلقى عدة وسائط وتمنح بعضها قيماً افتراضية، تماماً مثل الدالة المُسمّاة:
area <- \(w, h = w) w * h
print(area(3))
print(area(3, 5))الناتج:
[1] 9
[1] 15التحدي
سهلأكمل القائمة ops بثلاث دوال مجهولة ذات وسيط واحد:
- تعيد
doubleالوسيط مضروبًا في 2 - تعيد
squareالوسيط مضروبًا في نفسه - تعيد
negateالوسيط بعد عكس إشارته
يقرأ الكود المزوّد اسم عملية ورقمًا، ويستدعي تلك الدالة من ops ويطبع النتيجة.
جرّب بنفسك
ops <- list(
# اكتب الكود الخاص بك هنا
double = function(x) x
)
# كود الإدخال/الإخراج المُزوَّد: اتركه كما هو
input <- suppressWarnings(readLines(file("stdin")))
f <- ops[[input[1]]]
cat(f(as.numeric(input[2])), sep = "\n")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهمتدرّب بنفسك: مترجم R عبر الإنترنت