Menu
CoddyTech

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] TRUE
challenge icon

Thử 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ọc
  • Only first: theo sau là các học viên chỉ có trong a
  • Total: 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")
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 Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch R online