Định dạng với sprintf()
Thuộc phần Logic và luồng điều khiển trong hành trình R của Coddy. Bài học 2 trên 64.
sprintf() tạo chuỗi từ một mẫu. Mỗi chỗ giữ chỗ % được thay bằng đối số tiếp theo: %s dành cho văn bản, %d dành cho số nguyên và %f dành cho số thực.
name <- "Ada"
age <- 36
print(sprintf("%s is %d years old", name, age))Đầu ra:
[1] "Ada is 36 years old"%d chỉ chấp nhận số nguyên: sprintf("%d", 2.5) sẽ dừng và báo lỗi.
Độ chính xác giữa % và f đặt số chữ số thập phân, vì vậy %.2f làm tròn đến hai chữ số:
total <- 3 * 4.5 * 1.2
print(sprintf("Total: %.2f", total))Đầu ra:
[1] "Total: 16.20"Độ rộng sẽ đệm giá trị bằng khoảng trắng để đạt số ký tự đó: %5d đệm bên trái, %-6s đệm bên phải và %03d đệm bằng các số 0. %% in ra dấu phần trăm.
print(sprintf("[%5d]", 42))
print(sprintf("[%-6s]", "tea"))
print(sprintf("%03d", 7))
print(sprintf("%d%%", 85))Đầu ra:
[1] "[ 42]"
[1] "[tea ]"
[1] "007"
[1] "85%"sprintf() được vector hóa: với các đối số dạng vector, hàm trả về một chuỗi cho mỗi phần tử. cat() với sep = "\n" in mỗi chuỗi trên một dòng riêng.
items <- c("tea", "cake")
prices <- c(4, 12.5)
lines <- sprintf("%-5s %6.2f", items, prices)
cat(lines, sep = "\n")Đầu ra:
tea 4.00
cake 12.50Thử thách
DễHoàn thiện receipt_line(item, qty, price). Trả về mặt hàng, số lượng và tổng tiền của mặt hàng đó (qty * price) theo định dạng tea x3 = 13.50: mặt hàng, một dấu cách, x theo sau là số lượng, rồi đến = và tổng tiền với đúng hai chữ số thập phân.
Code được cung cấp đọc mặt hàng, số lượng và giá (mỗi giá trị trên một dòng), rồi in ra giá trị trả về.
Tự làm thử
receipt_line <- function(item, qty, price) {
# Viết code của bạn tại đây
""
}
# Đoạn code đầu vào/đầu ra đã được cung cấp: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
cat(receipt_line(input[1], as.integer(input[2]), as.numeric(input[3])), sep = "\n")
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng điều khiển
1Chuỗi chuyên sâu
Chuỗi con với substr()Định dạng với sprintf()Tách và nối chuỗiTìm kiếm trong chuỗiThay thế văn bảnÔn tập: Tạo tên người dùng10Luồng điều khiển nâng cao
Hàm switch()ifelse() dạng vector hóarepeat và breakHàm đệ quyÔn tập: phân loại điểmTự luyện tập: Trình biên dịch R online