छोटे लोगों को सदिश किया जाता है, जिसका अर्थ है कि वे एक सदिश राशि लौटा सकते हैं:
((-2:2) >= 0) & ((-2:2) <= 0)
# [1] FALSE FALSE TRUE FALSE FALSE
प्रत्येक वेक्टर के केवल पहले तत्व की जांच करने के लिए लंबा फॉर्म बाएं से दाएं मूल्यांकन करता है, इसलिए उपरोक्त देता है
((-2:2) >= 0) && ((-2:2) <= 0)
# [1] FALSE
जैसा कि सहायता पृष्ठ कहता है, यह लंबे रूप को "प्रोग्रामिंग नियंत्रण-प्रवाह के लिए उपयुक्त बनाता है और [यदि क्लॉस में आम तौर पर पसंद किया जाता है] है।"
तो आप लंबे रूपों का उपयोग तभी करना चाहते हैं जब आप निश्चित हों कि वैक्टर की लंबाई एक है।
आपको पूरी तरह से निश्चित होना चाहिए कि आपके वैक्टर केवल लंबाई 1 हैं, ऐसे मामलों में जहां वे कार्य हैं जो केवल लंबाई 1 बूलियन्स लौटाते हैं। आप लघु रूपों का उपयोग करना चाहते हैं यदि वैक्टर संभवतः लंबाई> 1 है। तो अगर आप पूरी तरह से सुनिश्चित नहीं कर रहे हैं, या तो आप पहले की जाँच करें, या छोटे फार्म का उपयोग करें और उसके बाद का उपयोग करना चाहिए all
और any
नियंत्रण प्रवाह बयान में उपयोग के लिए लंबाई एक करने के लिए इसे कम करने, जैसे if
।
कार्यों all
और any
अक्सर एक सदिश तुलना के परिणाम पर उपयोग किया जाता है यह देखने के लिए कि क्या सभी या किसी भी तुलना क्रमशः सही हैं। इन फ़ंक्शंस के परिणाम निश्चित रूप से लंबाई 1 हैं, इसलिए यदि वे क्लॉस में उपयोग के लिए उपयुक्त हैं, जबकि सदिश तुलना से परिणाम नहीं हैं। (हालांकि उन परिणामों में उपयोग के लिए उपयुक्त होगा ifelse
।
एक अंतिम अंतर: &&
और ||
केवल उतने ही शब्दों का मूल्यांकन करते हैं, जितने की उन्हें जरूरत होती है (जो लगता है कि शॉर्ट-सर्कुलेटिंग का मतलब है)। उदाहरण के लिए, यहां एक अपरिभाषित मूल्य का उपयोग करके तुलना की जाती है a
; यदि यह शॉर्ट-सर्किट नहीं है, जैसा कि &
और |
नहीं, तो यह एक त्रुटि देगा।
a
# Error: object 'a' not found
TRUE || a
# [1] TRUE
FALSE && a
# [1] FALSE
TRUE | a
# Error: object 'a' not found
FALSE & a
# Error: object 'a' not found
अंत में, द आर इनफर्नो में खंड 8.2.17 देखें , जिसका शीर्षक "and and and" है।