Tra cứu vector theo tên
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 7 trên 64.
Một vector có tên lưu các giá trị theo tên, nhờ đó nó hoạt động như một bảng tra cứu: tên là khóa và phần tử là giá trị của khóa đó. Đặt tên trong [[ ]] để lấy riêng giá trị.
prices <- c(tea = 4, cake = 7)
print(prices[["cake"]])
print(names(prices))Đầu ra:
[1] 7
[1] "tea" "cake"Dấu ngoặc đơn trả về phần tử cùng với tên của nó. [[ ]] chỉ trả về giá trị:
prices <- c(tea = 4, cake = 7)
print(prices["cake"])
print(prices[["cake"]] * 2)Đầu ra:
cake
7
[1] 14Tên có thể lấy từ một biến. Đây là cách chương trình tra cứu một khóa mà chương trình đọc từ đầu vào:
prices <- c(tea = 4, cake = 7)
item <- "tea"
print(prices[[item]])Đầu ra:
[1] 4Một vectơ tên sẽ tra cứu nhiều khóa cùng lúc, kể cả các khóa lặp lại, vì vậy sum() tính tổng đơn hàng chỉ trong một bước:
prices <- c(tea = 4, cake = 7)
order <- c("tea", "cake", "tea")
print(sum(prices[order]))Đầu ra:
[1] 15Tên không tồn tại sẽ cho kết quả khác nhau ở hai cách viết: prices["milk"] trả về NA, còn prices[["milk"]] dừng lại với lỗi subscript out of bounds.
Thử thách
DễHoàn thiện line_total(item, qty). Hàm này định nghĩa thực đơn bên dưới. Trả về giá của item nhân với qty, định dạng với hai chữ số thập phân: tea và 3 cho kết quả 7.50.
menu <- c(tea = 2.5, coffee = 3, cake = 4.25, soup = 6)Mọi món trong đầu vào đều có trong thực đơn. Code được cung cấp đọc món ăn và số lượng, rồi in ra giá trị trả về.
Tự làm thử
line_total <- function(item, qty) {
menu <- c(tea = 2.5, coffee = 3, cake = 4.25, soup = 6)
# Viết code của bạn ở đây
""
}
# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
cat(line_total(input[1], as.numeric(input[2])), 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ểm2Tra cứu khóa-giá trị
Tra cứu vector theo tênKiểm tra khóaThêm và xóa khóaLặp qua các tênÔn tập: Bàn giao dịch cổ phiếuTự luyện tập: Trình biên dịch R online