Tạo danh sách
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 71 trên 78.
Vector rất mạnh, nhưng có một hạn chế: mọi phần tử phải cùng kiểu dữ liệu. Khi cần lưu trữ nhiều kiểu dữ liệu khác nhau cùng nhau, R cung cấp danh sách (list).
Danh sách (list) là một cấu trúc dữ liệu linh hoạt, có thể chứa các phần tử thuộc nhiều kiểu dữ liệu khác nhau, bao gồm số, ký tự, giá trị logic và cả các véc-tơ hoặc danh sách khác. Bạn tạo danh sách bằng hàm list():
my_list <- list(42, "hello", TRUE)
print(my_list)Đầu ra:
[[1]]
[1] 42
[[2]]
[1] "hello"
[[3]]
[1] TRUEHãy chú ý cách mỗi phần tử được hiển thị cùng với chỉ số của nó trong dấu ngoặc vuông kép. Cách này khác với vector, trong đó các phần tử xuất hiện trên một dòng. Danh sách cũng có thể chứa vector làm phần tử:
my_list <- list(c(1, 2, 3), "text", c(TRUE, FALSE))
print(my_list)Đầu ra:
[[1]]
[1] 1 2 3
[[2]]
[1] "text"
[[3]]
[1] TRUE FALSEKhả năng kết hợp các kiểu dữ liệu khác nhau khiến danh sách rất phù hợp để biểu diễn các cấu trúc dữ liệu phức tạp, chẳng hạn như hồ sơ của một người chứa tuổi, tên và trạng thái thành viên trong cùng một đối tượng.
Thử thách
DễBạn sẽ nhận được ba dòng đầu vào:
- Một giá trị số (ví dụ:
99.99) - Một giá trị văn bản (ví dụ:
Premium Member) - Một giá trị logic dưới dạng văn bản:
TRUEhoặcFALSE(ví dụ:TRUE)
Thực hiện các thao tác sau:
- Đọc ba đầu vào và chuyển đổi chúng sang các kiểu dữ liệu phù hợp (số, ký tự và logic)
- Tạo một danh sách chứa ba giá trị này theo thứ tự: giá trị số trước, tiếp theo là văn bản, rồi đến giá trị logic
- Tạo một danh sách thứ hai chứa một vector gồm ba số
c(10, 20, 30)làm phần tử đầu tiên và văn bản"data"làm phần tử thứ hai - In ra danh sách thứ nhất
- In ra danh sách thứ hai
Ví dụ, nếu đầu vào là:
42.5
Active User
FALSEĐầu ra sẽ là:
[[1]]
[1] 42.5
[[2]]
[1] "Active User"
[[3]]
[1] FALSE
[[1]]
[1] 10 20 30
[[2]]
[1] "data"Hãy nhớ rằng danh sách có thể chứa các phần tử thuộc nhiều kiểu dữ liệu khác nhau, và bạn có thể đưa vector vào làm phần tử của danh sách.
Tự làm thử
# Đọc ba đầu vào
con <- file("stdin", "r")
numeric_input <- suppressWarnings(readLines(con, n = 1))
text_input <- suppressWarnings(readLines(con, n = 1))
logical_input <- suppressWarnings(readLines(con, n = 1))
# TODO: Viết code bên dưới
# 1. Chuyển các đầu vào sang kiểu dữ liệu phù hợp (số, ký tự, giá trị logic)
# 2. Tạo một danh sách chứa ba giá trị đã chuyển đổi theo đúng thứ tự
# 3. Tạo danh sách thứ hai với c(10, 20, 30) là phần tử đầu tiên và "data" là phần tử thứ hai
# 4. In ra cả hai danh sáchBà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 động11Vectơ
Tạo vectơ bằng c()Truy cập phần tử trong vectơChỉnh sửa vectơCác phép toán trên vectơÔn tập: vectơ giáÔn tập: vectơ đảo ngượcVectơ có tên14Danh sách trong R
Tạo danh sáchTruy cập phần tử trong danh sáchChỉnh sửa danh sáchDanh sách có tênÔn tập: Danh sách sản phẩm3Toá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