支出の記録
CoddyのRジャーニー「ロジックとフロー」セクションの一部。レッスン 57/64。
このプロジェクトでは、1行に1つずつコマンドを読み取る支出トラッカーを構築します。5つのステップを通して、支出の記録、合計の報告、カテゴリ別の支出のグループ化、最も大きな支出の一覧表示、そして1か月分の要約ができるようになります。各ステップでは、同じ tracker(commands) 関数を拡張します。
ADD 2024-05-01 food 12.50
ADD 2024-05-02 rent 500
TOTAL
CATEGORY
TOP 2
MONTH 2024-05支出は、支出1件につき1行を持つデータフレームに格納されます。最初に、適切な型の空の列が3つ用意され、rbind() によって有効な ADD ごとに1行が追加されます。
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.5ADD 行には4つの部分と正の金額が必要です。警告の代わりに不正な値が NA になるよう、suppressWarnings(as.numeric()) で金額を変換し、その行を追加する前に確認します:
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>:行にちょうど4つの部分があり、金額が0より大きい数値である場合は、支出を追加し、金額を小数点以下2桁にしてadded <category> <amount>と返します。たとえばadded food 12.50のようにします。それ以外の場合は、invalid:に続けてコマンド全体を返します。
提供されたコードは、各入力行を1つのコマンドとして 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")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Rオンラインコンパイラ