Skip to content

Module 2: Lists & Subsetting 📦

📝 Stats

  • Số lượng: 10 câu hỏi
  • Độ khó: Trung bình
  • Mục tiêu: Phân biệt được toa tàu (List) và hàng hóa (Element).

MCQ

Q1. Sự khác biệt chính giữa Atomic VectorList là gì?

  • [ ] List có tên, Vector không có tên.
  • [ ] List có thể chứa các phần tử khác kiểu nhau (Heterogeneous), Vector thì không.
  • [ ] Vector nhanh hơn List.
  • [ ] List là 2D, Vector là 1D.

Đáp án: List có thể chứa các phần tử khác kiểu nhau.

Q2. Cho x <- list(a = 1:3, b = "hello"). Lệnh x[1] trả về kiểu dữ liệu gì?

  • [ ] Integer Vector
  • [ ] List
  • [ ] Character
  • [ ] NULL

Đáp án: List. Giải thích: [ luôn trả về cùng kiểu với object gốc (List trả về List con).

Q3. Cũng list trên, lệnh x[[1]] trả về kiểu dữ liệu gì?

  • [ ] Integer Vector
  • [ ] List
  • [ ] Character
  • [ ] NULL

Đáp án: Integer Vector. Giải thích: [[ moi ruột container ra lấy nội dung.

Q4. Để truy cập phần tử "hello", lệnh nào sau đây SAI?

  • [ ] x[[2]]
  • [ ] x$b
  • [ ] x[["b"]]
  • [ ] x[2]

Đáp án: x[2]. Giải thích: x[2] trả về một List chứa chuỗi "hello", chứ không phải bản thân chuỗi "hello".


Coding Challenge

Challenge 1: The JSON Parser Simulation

Giả sử bạn nhận được output từ API dưới dạng List lồng nhau (Nested List):

r
api_response <- list(
  status = "ok",
  data = list(
    users = list(
      list(id = 1, name = "Tom"),
      list(id = 2, name = "Jerry")
    )
  )
)

Hãy viết lệnh để lấy ra chữ "Jerry".

r
# Code:
# Cách 1 (Dùng $):
api_response$data$users[[2]]$name

# Cách 2 (Dùng [[):
api_response[["data"]][["users"]][[2]][["name"]]