Bắt đầu ngayBắt đầu miễn phí

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()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() sang discard() 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

Xem khóa học

Hướng dẫn bài tập

  • Map hàm set_names() lên all_visits để thêm tên các ngày: all_visits_named.
  • Tạo một mapper tên threshold để kiểm tra .x có lớn hơn 100 hay không.
  • Tạo group_over bằng cách giữ lại các phần tử lớn hơn 100.
  • Tạo group_under bằ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, ___))
Chỉnh sửa và Chạy Mã