2015-09-09 9 views
6

बदलती है, निम्नलिखित कोड में, मुझे 96 की लंबाई की उम्मीद थी, लेकिन मुझे लंबाई 48 की एक सूची मिलती है। क्या आप इस परिणाम की व्याख्या कर सकते हैं?रिक्त वैक्टर के साथ सूची भरने से इसकी लंबाई

num_empty = 96 
empty_vecs = as.list(1:num_empty) 
for(i in 1:num_empty){empty_vecs[[i]] = c()} 
length(empty_vecs) 

[1] 48 

अब मैं इस प्रश्न का उत्तर दूंगा जिससे मुझे इस व्यवहार का सामना करना पड़ा। मूल सवाल यह था, "मैं आर में खाली वैक्टरों की सूची कैसे बना सकता हूं?" और जवाब "उपरोक्त कोड में character() के साथ c() को बदलें"।

उत्तर

8

c() (उर्फ NULL) के बराबर सूची तत्व सेट करना उन्हें हटा देता है, और इसलिए इस लूप को आपकी सूची में हर दूसरे तत्व को हटाने का प्रभाव पड़ता है। इस देखने के लिए, एक छोटे उदाहरण पर विचार करें, iteratively जिसके परिणामस्वरूप वेक्टर बाहर मुद्रण:

e <- list(1, 2, 3, 4) 
e 
# [[1]] 
# [1] 1 
# 
# [[2]] 
# [1] 2 
# 
# [[3]] 
# [1] 3 
# 
# [[4]] 
# [1] 4 
# 
e[[1]] <- c() 
e 
# [[1]] 
# [1] 2 
# 
# [[2]] 
# [1] 3 
# 
# [[3]] 
# [1] 4 
# 
e[[2]] <- c() 
e 
# [[1]] 
# [1] 2 
# 
# [[2]] 
# [1] 4 

e[[3]] <- c() 
e 
# [[1]] 
# [1] 2 
# 
# [[2]] 
# [1] 4 

e[[4]] <- c() 
e 
# [[1]] 
# [1] 2 
# 
# [[2]] 
# [1] 4 

ध्यान दें कि अगर आप वास्तव में 96 शून्य मानों की सूची बनाना चाहता था, आप की कोशिश कर सकते:

replicate(96, c(), FALSE) 
+1

एक और तरीका है है: 'प्रतिनिधि (सूची (एनयूएलएल), 9 6) ' –

+0

आसा साइड नोट, यदि आप इसे रिवर्स ऑर्डर में करते हैं' (i num_empty: 1) {empty_vecs [[i]] = c()} 'सूची खाली हो जाएगा – agstudy

+2

मैं इसे और अधिक स्पष्ट कर सकता हूं कि 'c()' एक ऐसा फ़ंक्शन है जो आउटपुट में कोई पैरामीटर पारित करते समय 'NULL 'देता है। 'सी()' "वेक्टर" फ़ंक्शन नहीं है जिसे हर कोई ऐसा लगता है। यह वैक्टर को संयोजित करने के लिए है। 'सी()' एक वर्ण वेक्टर() 'या' संख्यात्मक() 'करता है उसी तरह एक खाली वेक्टर नहीं बनाता है। – MrFlick

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