आर

2016-07-28 4 views
5

में नामकरण सूची तत्व हाल ही में कुछ बड़ी, जटिल सूचियों के साथ मैं कुछ काम कर रहा हूं और मैंने कुछ व्यवहार देखा है जो आश्चर्यजनक (मेरे लिए, कम से कम) है, मुख्य रूप से सूची में नाम निर्दिष्ट करने के साथ। एक साधारण उदाहरण:आर

Fil <- list(
a = list(A=seq(1, 5, 1), B=rnorm(5), C=runif(5)), 
b = list(A="Cat", B=c("Dog", "Bird"), C=list("Squirrel", "Cheetah", "Lion")), 
c = list(A=rep(TRUE, 5), B=rep(FALSE, 5), C=rep(NA, 5))) 

filList <- list() 

for(i in 1:3){ 
    filList[i] <- Fil[i] 
    names(filList)[i] <- names(Fil[i]) 
} 
identical(Fil,filList) 
[1] TRUE 

लेकिन:

for(i in 1:3){ 
    filList[i] <- Fil[i] 
    names(filList[i]) <- names(Fil[i]) 
} 
identical(Fil,filList) 
[1] FALSE 

मुझे लगता है कि मुख्य कारण यह मुझे confuses है, क्योंकि बाएं हाथ की पाश के लिए पहले में पहली names लाइन के किनारे के रूप होने की जरूरत है काम करने के लिए दाईं ओर से अलग; मैंने सोचा होगा कि ये वही होना चाहिए। क्या कोई मुझे यह समझा सकता है?

+2

मैं इस तरह यह के बारे में सोच हालांकि विवरण संभावना सही नहीं हैं,:

वैकल्पिक रूप से, आप बस सब कुछ के साथ पाश बाहर कर सकता है जब आप 'नाम चलाने (filList [1])' आप ' अनिवार्य रूप से 'नाम' फ़ंक्शन द्वारा बनाए गए पर्यावरण के भीतर एक नई तत्व सूची बना रहे हैं। फिर आप नया नाम असाइन करते हैं, फ़ंक्शन चलाना समाप्त हो जाता है और आपकी नई सूची ऑब्जेक्ट नष्ट हो जाती है। हालांकि, जब आप 'नाम (फ़ाइलसूची) चलाते हैं [1]' आप अपने वैश्विक वातावरण में मौजूद 'फिललिस्ट' ऑब्जेक्ट के नाम संशोधित कर रहे हैं। – dayne

+2

बीटीडब्ल्यू, आप स्पष्टीकरण के लिए 'नाम (एक्स) [1] = नाम (वाई) [1] ' – Frank

+0

धन्यवाद, दिन और फ्रैंक जैसे दोनों पक्षों पर एक ही फॉर्म का उपयोग कर सकते हैं। – RobertMc

उत्तर

8

पहला मामला सही उपयोग है। दूसरे मामले में आप filList[i]names<- भेज रहे हैं जो केवल अस्थायी सबसेट किए गए ऑब्जेक्ट के रूप में मौजूद है।

names(filList) <- names(Fil) 
+0

क्या स्पष्टीकरण मैंने टिप्पणी के रूप में दिया है? – dayne

+0

@dayne हां, यह एक अलग प्रति है जो एक चर के लिए बाध्य नहीं है। – James

+0

बहुत बढ़िया, उत्तर के लिए धन्यवाद! – dayne