Menu
CoddyTech

Logic vector hóa phần 2

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 21 trên 78.

Giống như AND và OR có phiên bản vector hóa, toán tử NOT cũng hoạt động trên từng phần tử của vector. Khi áp dụng ! cho một vector các giá trị logic, toán tử này đảo từng phần tử riêng lẻ.

passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed  # FALSE TRUE FALSE TRUE

Mỗi TRUE trở thành FALSE, và mỗi FALSE trở thành TRUE. Điều này đặc biệt hữu ích khi bạn muốn tìm các phần tử không thỏa mãn một điều kiện nhất định:

temperatures <- c(18, 25, 30, 15, 22)

# Tìm các nhiệt độ KHÔNG cao hơn 20
!(temperatures > 20)  # TRUE FALSE FALSE TRUE FALSE

Bạn có thể kết hợp NOT dạng vector với & và | để tạo bộ lọc phức tạp:

ages <- c(16, 25, 17, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)

# Có thể tham gia nếu: age >= 18 OR (dưới 18 tuổi AND có sự cho phép)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUE

Hãy nhớ: dùng &, | và ! đơn khi làm việc với vector, và dùng &&, || kép khi so sánh các giá trị đơn.

challenge icon

Thử thách

Dễ

Dùng toán tử NOT được áp dụng theo từng phần tử (!) cùng với & và | để tạo các điều kiện logic phức hợp theo từng phần tử.

Bạn được cung cấp các vector sau:

scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)

Dùng các toán tử logic theo từng phần tử, bao gồm toán tử NOT, để tạo các vector logic sau:

  1. Tạo vector có tên failed, lưu TRUE cho mỗi điểm số KHÔNG lớn hơn hoặc bằng 60
  2. Tạo vector có tên absent, lưu giá trị ngược lại của attended (đảo từng giá trị)
  3. Tạo vector có tên at_risk, lưu TRUE cho mỗi học sinh KHÔNG tham dự HOẶC KHÔNG nộp bài tập về nhà
  4. Tạo vector có tên passing_but_absent, lưu TRUE cho mỗi học sinh có điểm lớn hơn hoặc bằng 60 VÀ KHÔNG tham dự
  5. Tạo vector có tên needs_support, lưu TRUE cho mỗi học sinh thỏa mãn: (điểm nhỏ hơn 50) HOẶC (KHÔNG tham dự VÀ KHÔNG nộp bài tập về nhà)

Dùng hàm print() để hiển thị failed, absent, at_risk, passing_but_absent và needs_support theo đúng thứ tự đó.

Tự làm thử

# Các vectơ đã cho
scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)

# TODO: Viết code của bạn bên dưới
# 1. Tạo 'failed': TRUE khi scores không >= 60

# 2. Tạo 'absent': giá trị ngược với attended

# 3. Tạo 'at_risk': KHÔNG attended HOẶC KHÔNG submitted_homework

# 4. Tạo 'passing_but_absent': scores >= 60 VÀ KHÔNG attended

# 5. Tạo 'needs_support': (scores < 50) HOẶC (KHÔNG attended VÀ KHÔNG submitted_homework)

# In kết quả
print(failed)
print(absent)
print(at_risk)
print(passing_but_absent)
print(needs_support)
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