Skip to content

Module 1: Vectors & Types 🧬

📝 Stats

  • Số lượng: 12 câu hỏi
  • Độ khó: Dễ -> Trung bình
  • Mục tiêu: Nắm vững quy tắc Recycling và Coercion.

Multiple Choice (MCQ)

Q1. Kết quả của typeof(c(1L, 2.5)) là gì?

  • [ ] integer
  • [ ] double
  • [ ] character
  • [ ] list

Đáp án: double. Giải thích: R ép kiểu theo hướng linh hoạt hơn. 2.5 là double, nên 1L (integer) bị ép thành 1.0 (double).

Q2. Luật "Coercion Hierarchy" nào sau đây là đúng (từ ít linh hoạt nhất đến linh hoạt nhất)?

  • [ ] Logical < Integer < Double < Character
  • [ ] Integer < Logical < Double < Character
  • [ ] Character < Double < Integer < Logical
  • [ ] Double < Integer < Logical < Character

Đáp án: Logical < Integer < Double < Character.

Q3. Kết quả của c(TRUE, "FALSE") là gì?

  • [ ] c(TRUE, FALSE) (Logical)
  • [ ] c("TRUE", "FALSE") (Character)
  • [ ] Lỗi (Error)
  • [ ] c(1, 0) (Numeric)

Đáp án: c("TRUE", "FALSE"). Giải thích: Character (chuỗi) "nuốt chửng" mọi thứ. TRUE bị ép thành chuỗi "TRUE".

Q4. Vector x <- 1:3. Lệnh x[5] trả về gì?

  • [ ] Error: Index out of bounds
  • [ ] 0
  • [ ] NULL
  • [ ] NA

Đáp án: NA. Giải thích: Khác với Python (báo lỗi), R trả về NA khi truy cập index ngoài phạm vi. Hãy cẩn thận!

Q5. (Tricky) Kết quả của 1:4 + 1:3 là gì?

  • [ ] 2 4 6 5
  • [ ] 2 4 6 NA
  • [ ] Error
  • [ ] Warning: longer object length is not a multiple of shorter object length

Đáp án: Warning... (nhưng vẫn trả về kết quả 2 4 6 5). Giải thích: R thực hiện recycling. 1:3 lặp lại -> 1, 2, 3, 1. Vector dài (4) không chia hết cho vector ngắn (3) nên R cảnh báo.


Coding Challenge

Challenge 1: The Cleaner

Bạn nhận được một vector dữ liệu bẩn từ file Excel: raw_data <- c("100", "200", "Missing", "300", "N/A")

Hãy viết code để:

  1. Chuyển nó thành Numeric vector.
  2. Các giá trị không phải số phải thành NA thực sự.
  3. Tính trung bình cộng (bỏ qua NA).
r
raw_data <- c("100", "200", "Missing", "300", "N/A")

# Code của bạn:
clean_data <- as.numeric(raw_data) 
# Warning: NAs introduced by coercion (Điều này là mong muốn!)

avg <- mean(clean_data, na.rm = TRUE)
print(avg) # 200