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チャレンジ
簡単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")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Rオンラインコンパイラ