Các phép toán trên tập hợp
Thuộc phần Logic và luồng điều khiển trong hành trình R của Coddy. Bài học 13 trên 64.
Ba hàm kết hợp hai vectơ dưới dạng tập hợp. Mỗi hàm trả về các giá trị không lặp lại:
union(a, b) có các giá trị xuất hiện trong một trong hai vectơ, intersect(a, b) có các giá trị xuất hiện trong cả hai, còn setdiff(a, b) có các giá trị của a không có trong b.
mon <- c("ana", "ben", "cy")
tue <- c("ben", "dee", "cy", "ben")
print(union(mon, tue))
print(intersect(mon, tue))
print(setdiff(mon, tue))Đầu ra:
[1] "ana" "ben" "cy" "dee"
[1] "ben" "cy"
[1] "ana"setdiff() phụ thuộc vào thứ tự của các đối số. Đổi chỗ chúng để lấy các giá trị chỉ có trong vectơ thứ hai:
mon <- c("ana", "ben", "cy")
tue <- c("ben", "dee", "cy")
print(setdiff(tue, mon))Đầu ra:
[1] "dee"Khi không còn gì, kết quả là một vector rỗng, character(0) đối với văn bản:
print(intersect(c("a", "b"), c("x", "y")))Đầu ra:
character(0)Kết quả giữ nguyên thứ tự của vector đầu tiên. Hãy sắp xếp chúng khi đầu ra cần có thứ tự nhất quán, và kiểm tra xem kết quả có rỗng không trước khi ghép:
a <- c("pear", "fig", "kiwi")
b <- c("kiwi", "pear")
both <- sort(intersect(a, b))
print(paste(both, collapse = ", "))
print(length(setdiff(b, a)) == 0)Đầu ra:
[1] "kiwi, pear"
[1] TRUEThử thách
DễHoàn thiện hàm (function) compare_courses(a, b). a và b là danh sách học viên của hai khóa học (course). Trả về ba dòng:
Both:theo sau là các học viên thuộc cả hai khóa họcOnly first:theo sau là các học viên chỉ có trongaTotal:theo sau là số học viên khác nhau trong cả hai khóa học
Sắp xếp tên trong mỗi danh sách rồi nối chúng bằng , . Nếu danh sách trống, hãy viết none.
Code được cung cấp đọc thông tin của hai khóa học từ các dòng có tên được phân tách bằng dấu phẩy, rồi in ra từng dòng được trả về.
Tự làm thử
compare_courses <- function(a, b) {
# Viết code của bạn ở đây
c("Both: ", "Only first: ", "Total: 0")
}
# Code đầu vào/đầu ra có sẵn: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
cat(compare_courses(strsplit(input[1], ",")[[1]], strsplit(input[2], ",")[[1]]), sep = "\n")
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 Logic và luồng điều khiển
1Chuỗi chuyên sâu
Chuỗi con với substr()Định dạng với sprintf()Tách và nối chuỗiTìm kiếm trong chuỗiThay thế văn bảnÔn tập: Tạo tên người dùng10Luồng điều khiển nâng cao
Hàm switch()ifelse() dạng vector hóarepeat và breakHàm đệ quyÔn tập: phân loại điểm3Tập hợp và đếm
Các giá trị duy nhấtCác phép toán trên tập hợpKiểm tra phần tửĐếm bằng table()Ôn tập: Khách mời sự kiện12Dự án: Theo dõi chi tiêu
Ghi lại các khoản chiTổng chi tiêuTự luyện tập: Trình biên dịch R online