Menu
Coddy logo textTech

支出の記録

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.5

ADD 行には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
challenge icon

チャレンジ

簡単

最初のコマンドについて 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")
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Rオンラインコンパイラ