Vectơ có tên
Thuộc phần Kiến thức nền tảng trong hành trình R của Coddy. Bài học 62 trên 78.
Đến giờ, bạn đã truy cập các phần tử trong vector bằng vị trí số. Nhưng nếu bạn có thể truy cập chúng bằng những tên có ý nghĩa thì sao? Vector có tên cho phép bạn gán nhãn cho từng phần tử, giúp code của bạn dễ đọc và tự giải thích hơn.
Bạn có thể tạo một vector có tên bằng cách cung cấp tên khi tạo:
ages <- c(alice = 25, bob = 30, charlie = 28)
print(ages)Đầu ra:
alice bob charlie
25 30 28Để truy cập các phần tử theo tên, hãy dùng tên làm chuỗi bên trong dấu ngoặc vuông:
print(ages["bob"])Đầu ra:
bob
30Bạn cũng có thể thêm tên vào một vector hiện có bằng hàm names():
scores <- c(85, 92, 78)
names(scores) <- c("math", "science", "english")
print(scores["math"])Đầu ra:
math
85Vector có tên đặc biệt hữu ích khi làm việc với dữ liệu có nhãn tự nhiên, chẳng hạn như lưu điểm của học sinh theo môn học hoặc giá theo tên sản phẩm.
Thử thách
DễBạn sẽ nhận được hai dòng đầu vào:
- Một danh sách tên sản phẩm được phân tách bằng dấu phẩy (ví dụ:
laptop,phone,tablet,headphones) - Một danh sách giá tương ứng được phân tách bằng dấu phẩy (ví dụ:
999,699,449,199)
Thực hiện các thao tác sau:
- Tạo một vector số từ các giá
- Gán tên sản phẩm cho vector bằng hàm
names() - In ra toàn bộ vector có tên
- In ra giá của sản phẩm thứ hai bằng cách truy cập sản phẩm đó theo tên
- In ra giá của sản phẩm cuối cùng bằng cách truy cập sản phẩm đó theo tên
Ví dụ, nếu đầu vào là:
apple,banana,orange,grape
2,1,3,4Đầu ra sẽ là:
apple banana orange grape
2 1 3 4
banana
1
grape
4Lưu ý: Truy cập phần tử thứ hai và phần tử cuối cùng bằng tên làm chỉ số (một chuỗi, ví dụ prices["banana"]), không dùng vị trí bằng số. Tên lấy từ dòng đầu vào thứ nhất, vì vậy trước tiên hãy tìm đúng tên trong dòng đó.
Tự làm thử
# Đọc đầu vào
con <- file("stdin", "r")
products_input <- suppressWarnings(readLines(con, n = 1))
prices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Phân tích các đầu vào được phân tách bằng dấu phẩy
product_names <- strsplit(products_input, ",")[[1]]
price_values <- strsplit(prices_input, ",")[[1]]
# TODO: Viết code bên dưới
# 1. Tạo một vectơ số từ các mức giá
# 2. Gán tên sản phẩm cho vectơ bằng names()
# 3. In ra toàn bộ vectơ có tên
# 4. In ra giá của sản phẩm thứ hai bằng cách truy cập theo tên
# 5. In ra giá của sản phẩm cuối cùng bằng cách truy cập theo tênBà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 Kiến thức nền tảng
4Toán tử phần 2
Toán tử logic (AND, OR)Toán tử logic phần 2 (NOT)Ôn tập: logic đơn giảnLogic vector hóa phần 1Logic vector hóa phần 22Biến và kiểu dữ liệu
Kiểu dữ liệu sốKiểu dữ liệu số nguyênKiểu dữ liệu ký tựKiểu dữ liệu logicKiểm tra kiểu dữ liệuQuy tắc đặt tênGiá trị thiếu: NATóm tắt: tạo biến8Vòng lặp
Vòng lặp forVòng lặp whileBreakNext (continue)Ôn tập: giai thừaTạo dãy (seq, :)Vòng lặp lồng nhauÔn tập: đầu vào động3Toán tử phần 1
Toán tử số họcPhép chia lấy phần nguyên và phép moduloToán tử gánÔn tập: phép tính đơn giảnToán tử so sánh6Nhập xuất cơ bản
In đầu raDùng cat để in đầu raĐầu ra với biếnĐọc đầu vào bằng readline()Cơ bản về chuyển đổi kiểuÔn tập: máy tính tuổiÔn tập: đúng hay sai9Hàm
Khai báo hàmĐối số hàmGiá trị trả vềÔn tập: hàm SigmaÔn tập: hàm xác thựcGiá trị tham số mặc địnhTự luyện tập: Trình biên dịch R online