जवाबों:
तो, @ जेम्स और @ ब्रायन ने समझाया कि 3L का क्या मतलब है। लेकिन आप इसका इस्तेमाल क्यों करेंगे?
अधिकांश समय इससे कोई फ़र्क नहीं पड़ता - लेकिन कभी-कभी आप इसका उपयोग अपने कोड को तेज़ी से चलाने और कम मेमोरी का उपभोग करने के लिए कर सकते हैं । एक डबल ("संख्यात्मक") वेक्टर प्रति तत्व 8 बाइट्स का उपयोग करता है। एक पूर्णांक वेक्टर केवल 4 बाइट्स प्रति तत्व का उपयोग करता है। बड़े वैक्टर के लिए, यह कम बर्बाद की गई मेमोरी और सीपीयू के माध्यम से कम करने के लिए कम है (इसलिए यह आमतौर पर तेज है)।
ज्यादातर यह सूचकांक के साथ काम करते समय लागू होता है। यहां एक उदाहरण दिया गया है जहां पूर्णांक वेक्टर में 1 जोड़ना एक डबल वेक्टर में बदल जाता है:
x <- 1:100
typeof(x) # integer
y <- x+1
typeof(y) # double, twice the memory size
object.size(y) # 840 bytes (on win64)
z <- x+1L
typeof(z) # still integer
object.size(z) # 440 bytes (on win64)
... लेकिन यह भी ध्यान दें कि पूर्णांकों के साथ अत्यधिक काम करना खतरनाक हो सकता है:
1e9L * 2L # Works fine; fast lean and mean!
1e9L * 4L # Ooops, overflow!
... और जैसा @Gavin ने बताया, पूर्णांक के लिए सीमा लगभग -2e9 से 2e9 है।
एक चेतावनी यह है कि यह वर्तमान आर संस्करण (2.13) पर लागू होता है। कुछ बिंदु पर यह बदल सकता है (64-बिट पूर्णांक मधुर होंगे, जो लंबाई के वैक्टर को सक्षम कर सकते हैं> 2e9)। सुरक्षा के लिए, आप का उपयोग करना चाहिए .Machine$integer.max
, जब भी आप अधिकतम पूर्णांक मान (और निगेट न्यूनतम के लिए कि) की जरूरत है।
object.size
। यह फोरट्रान या सी कोड के लिए उपयोगी है जो किसी विशेष प्रकार के डेटा की आवश्यकता हो सकती है।
object.size(1:100)
बनाम object.size(1:100+0)
यह 400 बाइट्स है + कुछ ओवरहेड बनाम 800 बाइट्स + कुछ ओवरहेड। मैंने ऊपर का उदाहरण अपडेट किया।
c(1L, 2L, 3L, 4L,...100L)
बनाम जैसे एक संपूर्ण वेक्टर बनाते हैं as.integer(c(1, 2, 3, 4,...100))
।
आर भाषा परिभाषा के स्थिरांक अनुभाग से :
हम किसी स्पष्ट संख्या को पूर्णांक बनाने के इरादे से किसी भी संख्या को अर्हता प्राप्त करने के लिए 'L' प्रत्यय का उपयोग कर सकते हैं। इसलिए '0x10L' हेक्साडेसिमल प्रतिनिधित्व से पूर्णांक मान 16 बनाता है। स्थिर 1e3L संख्यात्मक मान के बजाय पूर्णांक के रूप में 1000 देता है और 1000L के बराबर होता है। (ध्यान दें कि 'L' को 1e3 शब्द को अर्हता प्राप्त करने के रूप में माना जाता है और 3. नहीं।) यदि हम 'L' के साथ एक मान को अर्हता प्राप्त करते हैं जो पूर्णांक मान नहीं है, जैसे 1e-3L, तो हमें एक चेतावनी और संख्यात्मक मान प्राप्त होता है। बनाया था। संख्या में अनावश्यक दशमलव बिंदु होने पर चेतावनी भी बनाई जाती है, जैसे 1.L.
किसी फ़ंक्शन के लिए पूर्णांक मान को स्पष्ट रूप से बनाने के लिए आप फ़ंक्शन को as.integer कह सकते हैं या अधिक "L" प्रत्यय का उपयोग कर सकते हैं।
1 == 1L
देता हैTRUE
, लेकिनidentical(1, 1L)
देता हैFALSE
।