Menu
Coddy logo textTech

sprintf()による書式設定

CoddyのRジャーニー「ロジックとフロー」セクションの一部。レッスン 2/64。

sprintf()はテンプレートから文字列を組み立てます。各%プレースホルダーは次の引数に置き換えられます。テキストには%s、整数には%d、小数には%fを使います。

name <- "Ada"
age <- 36
print(sprintf("%s is %d years old", name, age))

出力:

[1] "Ada is 36 years old"

%dは整数のみを受け付けます。sprintf("%d", 2.5)はエラーで停止します。

% と f の間にある精度指定によって小数点以下の桁数が決まるため、%.2f は小数点以下2桁に丸めます:

total <- 3 * 4.5 * 1.2
print(sprintf("Total: %.2f", total))

出力:

[1] "Total: 16.20"

幅は値をその文字数になるように埋めます。%5dは左側を埋め、%-6sは右側を埋め、%03dはゼロで埋めます。%%はパーセント記号を出力します。

print(sprintf("[%5d]", 42))
print(sprintf("[%-6s]", "tea"))
print(sprintf("%03d", 7))
print(sprintf("%d%%", 85))

出力:

[1] "[   42]"
[1] "[tea   ]"
[1] "007"
[1] "85%"

sprintf()はベクトル化されています。ベクトル引数を指定すると、要素ごとに1つの文字列を返します。sep = "\n"を指定したcat()は、各文字列をそれぞれ別の行に出力します。

items <- c("tea", "cake")
prices <- c(4, 12.5)
lines <- sprintf("%-5s %6.2f", items, prices)
cat(lines, sep = "\n")

出力:

tea     4.00
cake   12.50
challenge icon

チャレンジ

簡単

receipt_line(item, qty, price)を完成させてください。項目、数量、行合計(qty * price)を、tea x3 = 13.50の形式で返します。つまり、項目、スペース、数量の前にx、続けて = 、そして小数点以下2桁ちょうどの合計です。

提供されたコードは、項目、数量、価格を(1行に1つずつ)読み取り、返された値を出力します。

自分で試してみよう

receipt_line <- function(item, qty, price) {
  # ここにコードを書いてください
  ""
}

# 提供された入出力コード:そのままにしておいてください
input <- suppressWarnings(readLines(file("stdin")))
cat(receipt_line(input[1], as.integer(input[2]), as.numeric(input[3])), sep = "\n")
quiz icon腕試し

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

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

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