2012-08-02 10 views
17

आर में, क्या वेक्टर के घटकों को नामों को आवंटित करना संभव है बिना वेरिएबल नाम पर वेक्टर असाइन किए बिना? सामान्य तरीके से जाहिर है:वेक्टर को वेरिएबल नाम निर्दिष्ट किए बिना वेक्टर प्रविष्टियों में नाम असाइन करें?

z <- 1:3 
names(z) <- c("a", "b", "c") #normal way 
names(1:3) <- c("a", "b", "c") #throws an error 

दूसरा तरीका फेंकता "नाम में त्रुटि (1: 3) < - सी (" एक "," ख "," ग "): काम की लक्ष्य के लिए विस्तारित गैर भाषा वस्तु "

दस्तावेज़ के अनुसार, अभिव्यक्ति तो कोई झटका यह काम नहीं करता, मैं सिर्फ एक काम है, तो चारों ओर सोच रहा हूँ

z <- "names<-"(z, 
    "[<-"(names(z), 3, "c2"))’. 

के रूप में मूल्यांकन किया जाता है।

names(z <- 1:3) <- c("a", "b", "c") 
> z 
a b c 
1 2 3 

बस अंतरिक्ष की बर्बादी दो अलग-अलग लाइनों पर डाल करने के लिए है कि तरह लगता है:

आदर्श रूप में, यह कुछ ऐसा करना अच्छा होगा।

उत्तर

35

setNames() का उपयोग करने के बारे में, जो आपके सुझाए गए आदर्श से भी क्लीनर/स्पष्ट लगता है?

z <- setNames(1:3, c("a", "b", "c")) 
# z 
# a b c 
# 1 2 3 
+1

बस की जाँच की, जाहिरा तौर पर सेट नाम 'सामान्य तरीके से' के लिए सिर्फ एक समारोह आवरण है। अभी भी एक अंतरिक्ष बचतकर्ता, लेकिन यह कुछ भी कल्पना नहीं कर रहा है। – zzk

+0

@zzk - हाँ, मैंने यह भी देखा (और यह भी देखा कि यह ** आंकड़े ** पैकेज में है, विचित्र रूप से पर्याप्त है)। स्पष्ट रूप से बेस आर में उपलब्ध नहीं होने के कारण कोई और थक गया, और इसे थोड़ा सा सुविधा समारोह के रूप में लिखा। –

2

हमेशा सोचा कि यह एक छोटे से क्लीनर था, यह भी एक अतिरिक्त पैकेज की जरूरत नहीं है:

z <- c(a=1, b=2, c=3) 
# z 
# a b c 
# 1 2 3 
संबंधित मुद्दे