التحذيرات وfinally
جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 54 من 64.
يُبلّغ التحذير عن مشكلة دون إيقاف التنفيذ: تُرجع الدالة قيمةً، وتطبع R التحذير في النهاية. تُصدر as.numeric() تحذيرًا للنص الذي ليس رقمًا، وتُرجع NA:
x <- as.numeric("abc")
print(x)الناتج:
[1] NA
Warning message:
NAs introduced by coercion مثل الأخطاء، تذهب التحذيرات إلى تدفق الأخطاء، لذا فهي تؤدي إلى فشل اختبار على Coddy. تعمل suppressWarnings() على إسكاتها عندما تتحقق من النتيجة بنفسك، بينما تحوّل tryCatch(..., warning = ) التحذير إلى قيمة:
x <- suppressWarnings(as.numeric("abc"))
print(is.na(x))
r <- tryCatch(as.numeric("abc"), warning = function(w) paste("warned:", conditionMessage(w)))
print(r)الناتج:
[1] TRUE
[1] "warned: NAs introduced by coercion"warning("message") يطلق تحذيرًا من التعليمات البرمجية الخاصة بك. ويعمل معالج التحذير بالطريقة نفسها التي يعمل بها معالج الخطأ:
ratio <- function(a, b) {
if (b == 0) warning("b is zero, returning Inf")
a / b
}
r <- tryCatch(ratio(1, 0), warning = function(w) conditionMessage(w))
print(r)المخرجات:
[1] "b is zero, returning Inf"يتم تشغيل finally = ... بعد التعبير وأي معالج، سواء حدث خطأ أم لا. استخدمه لتنفيذ العمل الذي يجب أن يحدث دائمًا، مثل رسالة ختامية:
load <- function(x) {
tryCatch({
if (x < 0) stop("negative")
x * 10
}, error = function(e) NA,
finally = cat("finished", x, "\n"))
}
print(load(2))
print(load(-1))المخرجات:
finished 2
[1] 20
finished -1
[1] NAالتحدي
سهلأكمل to_numbers(texts). حوّل كل نص إلى رقم. تصبح القيم التي يتعذر تحويلها NA من دون طباعة أي تحذير. أعد سطرين: Numbers: مع الأرقام المحوّلة مفصولة بمسافات (بما في ذلك قيم NA)، وInvalid: مع عدد القيم التي فشلت.
يقرأ الكود المزوّد النصوص كسطر مفصول بفواصل ويطبع كل سطر مُعاد.
جرّب بنفسك
to_numbers <- function(texts) {
# اكتب الكود الخاص بك هنا
c("Numbers: ", "Invalid: 0")
}
# كود الإدخال/الإخراج المُزوَّد: أبقه كما هو
input <- suppressWarnings(readLines(file("stdin")))
cat(to_numbers(strsplit(input[1], ",")[[1]]), sep = "\n")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهم8الفرز والتجميع
فرز المتجهاتالفرز حسب مفتاحالتجميع باستخدام split()ملخصات المجموعاتمراجعة - لوحة المتصدرين11معالجة الأخطاء
رفع الأخطاء باستخدام stop()التقاط الأخطاء باستخدام tryCatch()التحذيرات وfinallyالتحقق من صحة الإدخالمراجعة - آلة حاسبة آمنةتدرّب بنفسك: مترجم R عبر الإنترنت