शुरू करेंमुफ़्त में शुरू करें

& की जगह && का उपयोग करें

दोनों पासों पर एक ही संख्या आई है या नहीं, यह जानने के लिए 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 कोड लिखना

पाठ्यक्रम देखें

अभ्यास निर्देश

  1. improved_move() फंक्शन बनाएँ, जो move() जैसा है, लेकिन && का उपयोग करता है.
  2. 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)
कोड संपादित करें और चलाएँ