keep() और discard() के साथ अलग-अलग करें
हम अपने नतीजों को दो समूहों में बाँटना चाहते हैं: 100 से ऊपर वाले दिन, और 100 से नीचे वाले दिन। इसके लिए हम keep() और discard() को साथ में इस्तेमाल करेंगे.
दो फंक्शन क्यों? क्या हम एक ही फंक्शन से नहीं कर सकते? क्या हम is_less_than_hundred नाम का एक mapper नहीं बना सकते?
हम बना सकते हैं, लेकिन उससे गलती की संभावना बढ़ती है:
keep()सेdiscard()पर स्विच करना कॉपी-पेस्ट करने से आसान है। दोनों फंक्शनों को मिलाकर हमें सिर्फ एक mapper चाहिए। इसका मतलब है कि अगर हमें threshold बदलनी हो, तो हमें सिर्फ एक जगह बदलना पड़ेगा, दो जगह नहीं, जैसा कि दो mappers होने पर करना पड़ता।
कोड लिखते समय यह एक अच्छी आदत है: ऐसा लिखिए कि अगर किसी एक चीज़ में बदलाव करना हो, तो वह बदलाव सिर्फ एक ही जगह करना पड़े.
all_visits अब भी आपके वर्कस्पेस में उपलब्ध है.
यह अभ्यास पाठ्यक्रम का हिस्सा है
इंटरमीडिएट फ़ंक्शनल प्रोग्रामिंग विथ purrr
अभ्यास निर्देश
all_visitsपरset_names()फंक्शन को map कीजिए ताकि दिनों के नाम जुड़ जाएँ:all_visits_named.thresholdनाम का एक mapper बनाइए जो जाँचे कि.x100 से अधिक है या नहीं.- 100 से अधिक वाले एलिमेंट्स को रखते हुए
group_overबनाइए. - 100 से अधिक वाले एलिमेंट्स को हटाते हुए
group_underबनाइए.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
# 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, ___))