2012-05-18 14 views
9

त्वरित प्रश्न में असाइनमेंट का उपयोग करके वेक्टर तत्वों के नाम सेट नहीं कर सकते हैं। क्यों आर में (सही वेक्टर के पहले तत्व के चर मूल्य "हैलो" बताए) निम्नलिखित काम:आर में, गठबंधन समारोह

> a <- "Hello" 
> b <- c(a, "There") 
> b 
[1] "Hello" "There" 

और यह काम करता है:

> c <- c("Hello"=1, "There"=2) 
> c 
Hello There 
    1  2 

लेकिन यह (नहीं कर रही है वेक्टर तत्व नाम के बराबर "एक" नहीं बल्कि "हैलो" से):

> c <- c(a=1, "There"=2) 
> c 
    a There 
    1  2 

यह आर स्वीकार करते हैं कि मैं बयान c <- c(a=1, "There"=2) में एक के मूल्य का उपयोग करना चाहते हैं बनाने के लिए संभव है?

+2

एक तरफ: एएके! आप एक चर के साथ समारोह 'सी() 'मास्किंग कर रहे हैं! खतरा! खतरे, विल रॉबिन्सन! – joran

+0

ओह फिर से। तो मुझे एक चर 'c' नाम नहीं देना चाहिए? मैंने अपने प्रश्न को संपादित करने पर विचार किया, लेकिन मैं इसे शैक्षणिक उद्देश्यों के लिए छोड़ दूंगा। –

+0

यह विनाशकारी नहीं है, लेकिन सामान्य रूप से आपको सामान्य कार्यों को चर के रूप में टालना चाहिए। 'सी()', 'डेटा()' और 'टी()' सबसे सामान्य लोग उपयोग करने का प्रयास करते हैं। – joran

उत्तर

8

मुझे यकीन नहीं है कि c() आंतरिक रूप से नामित वस्तुओं से नाम विशेषता बनाता है। शायद यह list() और unlist() के साथ है? वैसे भी, आप पहले वेक्टर के मानों को आवंटित कर सकते हैं, और बाद में नाम विशेषताएँ निम्नानुसार हैं।

a <- "Hello" 
b <- c(1, 2) 
names(b) = c(a, "There") 
b 
# Hello There 
#  1  2 

फिर नामित तत्वों बाद में उपयोग करने के लिए:

b[a] <- 3 
b 
# Hello There 
#  3  2 
b["Hello"] <- 4 
b 
# Hello There 
#  4  2 
b[1] <- 5 
b 
# Hello There 
#  5  2 

संपादित

तुम सच में यह सब एक पंक्ति, में करने के लिए निम्न कार्य करना चाहता था, तो:

eval(parse(text = paste0("c(",a," = 1, 'there' = 2)"))) 
# Hello there 
# 1  2 

हालांकि, मुझे लगता है कि आप मूल्यों और नामों को निर्दिष्ट करना पसंद करेंगे eval(parse()) दृष्टिकोण के लिए arately।

0

नामों की सूची में मूल्यों को असाइन करें। फिर इसे असूचीबद्ध करें। जैसे

एलआर < -List ("एक" = 1, "वहाँ" = 2)

वी = असूचीबद्ध (एलआर)

यह एक नामित वेक्टर v

वी

a There 
1  2 
देता है
संबंधित मुद्दे