تسجيل النفقات
جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 57 من 64.
في هذا المشروع، ستبني متتبّعًا للنفقات يقرأ الأوامر، أمرًا واحدًا في كل سطر. وعلى مدى خمس خطوات، سيتعلّم تسجيل النفقات، والإبلاغ عن الإجمالي، وتجميع الإنفاق حسب الفئة، وإدراج أكبر النفقات، وتلخيص شهر. وتمتد كل خطوة من دالة tracker(commands) نفسها.
ADD 2024-05-01 food 12.50
ADD 2024-05-02 rent 500
TOTAL
CATEGORY
TOP 2
MONTH 2024-05توجد النفقات في إطار بيانات يحتوي على صف واحد لكل نفقة. ويبدأ بثلاثة أعمدة فارغة من الأنواع الصحيحة، وتضيف rbind() صفًا لكل ADD صالح:
expenses <- data.frame(date = character(0), category = character(0), amount = numeric(0))
expenses <- rbind(expenses, data.frame(date = "2024-05-01", category = "food", amount = 12.5))
print(nrow(expenses))
print(expenses$amount)الناتج:
[1] 1
[1] 12.5يجب أن يتكوّن سطر ADD من أربعة أجزاء ومبلغ موجب. حوّل المبلغ باستخدام suppressWarnings(as.numeric()) بحيث تعطي القيمة غير الصالحة NA بدلًا من تحذير، ثم تحقّق منه قبل إضافة الصف:
parts <- strsplit("ADD 2024-05-01 food abc", " ")[[1]]
amount <- suppressWarnings(as.numeric(parts[4]))
print(length(parts) == 4 && !is.na(amount) && amount > 0)الناتج:
[1] FALSEالتحدي
سهلأكمل tracker(commands) للأمر الأول:
ADD <date> <category> <amount>: إذا كان السطر يتكوّن من أربعة أجزاء بالضبط وكان المبلغ رقمًا أكبر من 0، فأضف المصروف وأرجعadded <category> <amount>مع تنسيق المبلغ إلى منزلتين عشريتين، مثلadded food 12.50. وإلا فأرجعinvalid:متبوعًا بالأمر كاملًا.
يمرّر الكود المزوّد كل سطر إدخال إلى tracker() باعتباره أمرًا واحدًا، ويطبع كل رد مُعاد في سطر مستقل. تُكتب التواريخ بالصيغة YYYY-MM-DD، وتكون الفئات كلمات بأحرف صغيرة، ولا يحتوي الإدخال إلا على الأوامر الموضّحة حتى الآن.
جرّب بنفسك
tracker <- function(commands) {
expenses <- data.frame(date = character(0), category = character(0), amount = numeric(0))
replies <- c()
for (cmd in commands) {
parts <- strsplit(cmd, " ")[[1]]
# اكتب الكود الخاص بك هنا
}
replies
}
# كود الإدخال/الإخراج المُزوَّد: أبقه كما هو
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), sep = "\n")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهمتدرّب بنفسك: مترجم R عبر الإنترنت