الدالة switch()
جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 47 من 64.
تقارن switch(x, name = value, ...) النص x بالأسماء وتُرجع قيمة الاسم المطابق. وهي تستبدل سلسلة طويلة من مقارنات else if بالمتغير نفسه:
size <- "m"
price <- switch(size, s = 2.5, m = 3, l = 3.5)
print(price)المخرجات:
[1] 3القيمة الأخيرة من دون اسم هي القيمة الافتراضية، وتُستخدم عندما لا يتطابق أي شيء. من دون قيمة افتراضية، تُرجع switch() غير المطابقة NULL بشكل غير مرئي:
day <- "fri"
print(switch(day, sat = "rest", sun = "rest", "work"))
print(is.null(switch("x", a = 1)))الناتج:
[1] "work"
[1] TRUEتنتقل القيمة الفارغة إلى القيمة التالية، لذا يمكن لعدة أسماء مشاركة النتيجة نفسها:
kind <- function(day) switch(day, sat = , sun = "weekend", "weekday")
print(kind("sun"))
print(kind("tue"))الناتج:
[1] "weekend"
[1] "weekday"يمكن أن تكون القيم كتلًا كاملة من التعليمات البرمجية بين الأقواس المعقوفة، وتكون النتيجة هي آخر تعبير في الكتلة الذي يتم تشغيله:
area <- function(shape, a, b = a) {
switch(shape,
square = a^2,
rect = a * b,
circle = {
r <- a / 2
round(pi * r^2, 2)
},
NA)
}
print(area("rect", 3, 4))
print(area("circle", 10))المخرجات:
[1] 12
[1] 78.54التحدي
سهلأكمل calculate(a, op, b). تكون op إحدى القيم plus أو minus أو times أو over. أعد نتيجة تطبيقها على a وb، أو unknown operation لأي قيمة أخرى من op. تؤدي القسمة على الصفر إلى إرجاع cannot divide by zero.
يقرأ الكود المُقدَّم a وop وb (واحدًا في كل سطر) ويطبع القيمة المُعادة.
جرّب بنفسك
calculate <- function(a, op, b) {
# اكتب الكود الخاص بك هنا
"unknown operation"
}
# كود الإدخال/الإخراج المُزوَّد: أبقه كما هو
input <- suppressWarnings(readLines(file("stdin")))
cat(calculate(as.numeric(input[1]), input[2], as.numeric(input[3])), sep = "\n")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد10تدفق التحكم المتقدم
الدالة switch()ifelse() المتجهةrepeat و breakالدوال التكراريةمراجعة - مُصنِّف الدرجات2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهمتدرّب بنفسك: مترجم R عبر الإنترنت