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 TRUEMỗ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 FALSEBạ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 TRUEHã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.
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:
- Tạo vector có tên
failed, lưuTRUEcho mỗi điểm số KHÔNG lớn hơn hoặc bằng 60 - Tạo vector có tên
absent, lưu giá trị ngược lại củaattended(đảo từng giá trị) - Tạo vector có tên
at_risk, lưuTRUEcho mỗi học sinh KHÔNG tham dự HOẶC KHÔNG nộp bài tập về nhà - Tạo vector có tên
passing_but_absent, lưuTRUEcho mỗi học sinh có điểm lớn hơn hoặc bằng 60 VÀ KHÔNG tham dự - Tạo vector có tên
needs_support, lưuTRUEcho 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)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
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 động3Toá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