Tách nhóm với keep() và discard()
Chúng ta muốn tách kết quả thành hai nhóm: các ngày trên 100 và các ngày dưới 100. Ta sẽ kết hợp keep() và discard() để làm điều đó.
Tại sao cần hai hàm? Chẳng phải ta có thể dùng một hàm thôi sao? Hay tạo một mapper tên là is_less_than_hundred?
Ta có thể, nhưng cách đó dễ gây lỗi hơn: chuyển từ
keep()sangdiscard()dễ hơn là sao chép rồi dán. Bằng cách kết hợp cả hai hàm, ta chỉ cần một mapper. Nghĩa là nếu muốn đổi ngưỡng, bạn chỉ cần đổi một lần, thay vì hai lần như khi dùng hai mapper.
Đây là một quy tắc bạn nên cố gắng áp dụng khi viết code: viết sao cho nếu cần thay đổi một thứ, bạn chỉ phải thay đổi đúng một chỗ.
all_visits vẫn có sẵn trong workspace của bạn.
Bài tập này là một phần của khóa học
Lập trình hàm nâng cao với purrr
Hướng dẫn bài tập
- Map hàm
set_names()lênall_visitsđể thêm tên các ngày:all_visits_named. - Tạo một mapper tên
thresholdđể kiểm tra.xcó lớn hơn 100 hay không. - Tạo
group_overbằng cách giữ lại các phần tử lớn hơn 100. - Tạo
group_underbằng cách loại bỏ các phần tử lớn hơn 100.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# Set the name of each subvector
day <- c("mon", "tue", "wed", "thu", "fri", "sat", "sun")
all_visits_named <- ___(all_visits, ~ ___(.x, ___))
# Create a mapper that will test if .x is over 100
threshold <- ___
# Run this mapper on the all_visits_named object: group_over
group_over <- ___(all_visits_named, ~ ___(.x, ___))
# Run this mapper on the all_visits_named object: group_under
group_under <- ___(all_visits_named, ~ ___(.x, ___))