Menu
CoddyTech

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

Hã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 FALSE

Khả 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.

challenge icon

Thử thách

Dễ

Bạn sẽ nhận được ba dòng đầu vào:

  1. Một giá trị số (ví dụ: 99.99)
  2. Một giá trị văn bản (ví dụ: Premium Member)
  3. Một giá trị logic dưới dạng văn bản: TRUE hoặc FALSE (ví dụ: TRUE)

Thực hiện các thao tác sau:

  1. Đọ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)
  2. 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
  3. 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
  4. In ra danh sách thứ nhất
  5. 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ách
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 Kiến thức nền tảng

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