Menu
CoddyTech

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] 14

Tê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] 4

Mộ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] 15

Tê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.

challenge icon

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")
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch R online