& की जगह && का उपयोग करें
दोनों पासों पर एक ही संख्या आई है या नहीं, यह जानने के लिए move_square() फंक्शन if स्टेटमेंट्स का उपयोग करता है.
if (is_double[1] & is_double[2] & is_double[3]) {
current <- 11 # Go To Jail - square 11 == Jail
}
& ऑपरेटर हमेशा अपने दोनों आर्ग्युमेंट्स का मूल्य निकालता है. यानी अगर आप x & y लिखते हैं, तो R हमेशा x और y दोनों को evaluate करने की कोशिश करेगा. कुछ स्थितियों में यह अक्षम होता है. उदाहरण के लिए, अगर x FALSE है, तो x & y हमेशा FALSE होगा, भले ही y का मान कुछ भी हो. इसलिए, आप y की गणना न करके थोड़ा प्रोसेसिंग समय बचा सकते हैं. && ऑपरेटर इसी तरकीब का फायदा उठाता है और जब कुल परिणाम पर कोई फर्क नहीं पड़ता, तो y को calculate करने की ज़रूरत नहीं समझता.
इस कोड में, अगर is_double[1] FALSE है तो हमें is_double[2] या is_double[3] को evaluate करने की ज़रूरत नहीं है, इसलिए & की जगह && लगाने से स्पीड बढ़ सकती है.
ध्यान देने वाली एक बात यह है कि && केवल single logical मानों पर काम करता है, यानी लंबाई 1 वाले logical वेक्टर (जैसे आप if कंडीशन में देते हैं), जबकि & लंबाई 1 से बड़े वेक्टर्स पर भी काम करता है.
यह अभ्यास पाठ्यक्रम का हिस्सा है
कार्यकुशल R कोड लिखना
अभ्यास निर्देश
improved_move()फंक्शन बनाएँ, जोmove()जैसा है, लेकिन&&का उपयोग करता है.microbenchmark()का उपयोग करके,improved_move()की तुलना पहले वालेmove()से करें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
# Example data
is_double
# Define the previous solution
move <- function(is_double) {
if (is_double[1] & is_double[2] & is_double[3]) {
current <- 11 # Go To Jail
}
}
# Define the improved solution
improved_move <- function(is_double) {
if (is_double[1] ___ is_double[2] ___ is_double[3]) {
current <- 11 # Go To Jail
}
}
# microbenchmark both solutions
# Very occassionally the improved solution is actually a little slower
# This is just random chance
microbenchmark(___, ___, times = 1e5)