2012-05-16 14 views
10

कहें कि मेरे पास वेक्टर है, उदाहरण के लिए, x <- 1:10, फिर x[0]x के समान श्रेणी के शून्य-लंबाई वाले वेक्टर को लौटाता है, यहां integer(0)`x [0]` शून्य-लंबाई वेक्टर क्यों लौटाता है?

मैं सोच रहा था कि उस विकल्प के पीछे कोई कारण है, क्योंकि त्रुटि को फेंकने के विपरीत, या NAx[11] के रूप में लौटाएगा? इसके अलावा, यदि आप ऐसी स्थिति के बारे में सोच सकते हैं जहां x[0] वापसी integer(0) उपयोगी है, तो इसे आपके उत्तर में शामिल करने के लिए धन्यवाद।

+1

इसी कारण से x [FALSE] –

+2

@TylerRinker: सबसे पहले, यह एक दिलचस्प सवाल है, 'x [0]', जिसे स्पष्ट रूप से परिभाषित नहीं किया गया है, 'पूर्णांक (0) 'देता है, जबकि' x [11] ', जिसे स्पष्ट रूप से परिभाषित नहीं किया गया है, 'एनए' देता है। साथ ही, स्पष्ट रूप से 'x [0] <- 5' असाइन करने से कोई त्रुटि या चेतावनी नहीं आती है, लेकिन 'x [0]' अभी भी पूर्णांक (0) 'है। – jthetzel

+0

@ टायलर रिंकर, मुझे लगता है कि मैं समझता हूं कि क्यों 'x [FALSE] 'शून्य-लंबाई वेक्टर लौटाता है: लॉजिकल (TRUE/FALSE) के साथ निकालने पर, किसी को' x' के समान लंबाई का वेक्टर प्रदान करने की आवश्यकता होती है।तो आपके उदाहरण में, 'FALSE' का पुनर्नवीनीकरण होता है जिसके परिणामस्वरूप 'x [rep (FALSE, लंबाई (x))]' और मुझे आश्चर्य नहीं है कि यह 'पूर्णांक (0)' देता है। वैसे ही, 'एक्स [TRUE] '' x' वापस आ जाएगा। लेकिन मुझे आपके द्वारा किए गए लिंक को 'x [0] 'और' x [FALSE]' के बीच नहीं दिखाई देता है। क्या आप विस्तार से बता सकते हैं? – flodel

उत्तर

1

मेरी क्रैक इस पर है क्योंकि मैं प्रोग्रामर नहीं हूं और निश्चित रूप से आर स्रोत में योगदान नहीं देता हूं। मुझे लगता है कि ऐसा इसलिए हो सकता है क्योंकि आपको किसी प्रकार के प्लेस धारक को यह बताने की ज़रूरत है कि यहां कुछ हुआ लेकिन कुछ भी वापस नहीं आया। यह tables और split जैसी चीज़ों के साथ अधिक स्पष्ट हो जाता है। उदाहरण के लिए जब आप मानों की एक तालिका बनाते हैं और कहते हैं कि उस सेल के शून्य हैं तो आपको यह धारण करने की आवश्यकता है कि वेक्टर में स्ट्रिंग से बने सेल में कोई मान नहीं है। x[0]==0 होने के लिए यह उचित नहीं होगा क्योंकि यह शून्य का अंकीय मूल्य नहीं है बल्कि किसी भी मूल्य की अनुपस्थिति है।

निम्नलिखित विभाजन हम एक स्थान धारक और integer(0) की जरूरत है

तो रखती है कोई मूल्यों की जगह लौटे जो के रूप में एक दूसरे यह रिटर्न numeric(0) जो अभी भी यह कहते हुए यह सांख्यिक जगह थी एक स्थान धारक है के लिए 0. सूचना ही नहीं है धारक।

with(mtcars, split(as.integer(gear), list(cyl, am, carb))) 
with(mtcars, split(gear, list(cyl, am, carb))) 

तो एक तरह से मेरी x[FALSE] प्रत्युत्तर में है कि यह वेक्टर में गैर विद्यमान शून्य स्थान का स्थान रखती है सच है।

ठीक है यह बालोंगा मैं बस इतना ही सही हूं जब तक कि कोई इसे विवाद नहीं करता और इसे आँसू देता है। इस गाइड के

पुनश्च पेज 19 (LINK) राज्य कि integer() and integer(0) are empty integer.

अतः पद संबंधित:How to catch integer(0)?

+0

मुझे अभी भी इस सवाल का जवाब नहीं है कि यह क्यों एनए [x] की तरह एनए वापस नहीं करता है। – Dason

+0

क्योंकि 'x [11] 'मौजूद है क्योंकि यह अभी गायब है। 'X [15] <- 3; x' आज़माएं और आप एक वेक्टर में देखेंगे कि प्रत्येक पूर्णांक मान तकनीकी रूप से 0 को छोड़कर मौजूद है। यहां तक ​​कि 'x [inf]' मौजूद है, यह अभी भी गायब है ('NA') जहां' x [ 0] 'कभी अस्तित्व में नहीं हो सकता है। स्थिति के रूप में 'x [n]' के बारे में सोचें और यह समझ में आता है। 'X [0] 'स्थिति जैसी कोई चीज़ नहीं है। –

+0

@ टायलर रिंकर: मैं आपसे सहमत हूं, लेकिन चर्चा के आगे, यदि एक्स [0] मौजूद नहीं है, तो क्यों x [0] <- 1' चेतावनी या त्रुटि नहीं लौटाता है? क्या हम उम्मीद नहीं करेंगे कि यह 'अमान्य प्रथम तर्क' जैसा कुछ वापस लौटाए, जो 'असाइनमेंट (x [0], 1)' द्वारा लौटाई गई त्रुटि संदेश है? – jthetzel

2

के बाद से सरणी सूचकांक 1 के आधार पर कर रहे हैं, सूचकांक 0 कोई अर्थ नहीं है। मूल्य को वेक्टर इंडेक्स के रूप में अनदेखा किया जाता है।

8

रूप ?"["

एनए और शून्य मूल्यों में देखा अनुमति दी जाती है: एक सूचकांक युक्त मैट्रिक्स की पंक्तियां एक शून्य, अनदेखी कर रहे हैं, जबकि एक एनए युक्त पंक्तियों परिणाम में एक एनए का उत्पादन।

तो 0 की अनुक्रमणिका केवल अनदेखा हो जाती है। हम निम्नलिखित

x <- 1:10 
x[c(1, 3, 0, 5, 0)] 
#[1] 1 3 5 

में देख सकते हैं तो अगर केवल सूचकांक हम इसे देने के 0 है तो उचित प्रतिक्रिया एक खाली वेक्टर वापस जाने के लिए है।

+0

+ 1। –

+0

धन्यवाद @ डसन। मुझे लगता है कि यह उद्धृत करने योग्य है कि आपके द्वारा उद्धृत वाक्य "मैट्रिस और Arrays" अनुभाग का हिस्सा है, न कि "परमाणु वेक्टर", इसलिए यह स्पष्ट रूप से मेरे प्रश्न का दस्तावेज़ीकरण या उत्तर नहीं दे रहा है, लेकिन शायद इसे extrapolation के लिए उपयोग किया जा सकता है। – flodel

+0

किसी भी तरह से, हालांकि यह चर्चा में मदद कर सकता है, मुझे "इसमें प्रलेखन इतना कहता है" में बहुत दिलचस्पी नहीं है; मुझे इस बारे में अधिक दिलचस्पी है कि यह विशेष विकल्प क्यों बनाया गया था। कुछ अन्य उत्तर और टिप्पणियां कुछ व्यावहारिक स्पष्टीकरण प्रदान करती हैं कि क्यों इसे 'एनए' जैसे 'x [11]' वापस नहीं करना चाहिए। तो मैं सोच रहा हूं कि क्यों डेवलपर्स ने इसके बजाय एक त्रुटि फेंकने का फैसला नहीं किया। – flodel

संबंधित मुद्दे