الإنفاق حسب الفئة
جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 59 من 64.
التحدي
سهلأضف الأمر CATEGORY. حافظ على عمل كل أمر من الخطوات السابقة تمامًا كما كان من قبل.
CATEGORY: أعد سطرًا واحدًا لكل فئة بالترتيب الأبجدي،food: 20.50، مع إجمالي الفئة مقربًا إلى منزلتين عشريتين. عند عدم تسجيل أي شيء، أعدno expenses.
ينتج عن أمر CATEGORY واحد عدة ردود، ويُطبع كل رد في سطر مستقل.
يمرر الكود المزوَّد كل سطر إدخال إلى 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]]
if (parts[1] == "ADD") {
amount <- suppressWarnings(as.numeric(parts[4]))
if (length(parts) != 4 || is.na(amount) || amount <= 0) {
replies <- c(replies, paste("invalid:", cmd))
} else {
expenses <- rbind(expenses, data.frame(date = parts[2], category = parts[3], amount = amount))
replies <- c(replies, sprintf("added %s %.2f", parts[3], amount))
}
} else if (parts[1] == "TOTAL") {
replies <- c(replies, sprintf("total: %.2f, count: %d", sum(expenses$amount), nrow(expenses)))
}
}
replies
}
# كود الإدخال/الإخراج المُقدَّم: اتركه كما هو
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), sep = "\n")
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهمتدرّب بنفسك: مترجم R عبر الإنترنت