2014-04-25 7 views
36

यहाँ के लिए अमान्य है है मदद फ़ाइल से

Error in x$ed : $ operator is invalid for atomic vectors 

उत्तर

51

$ के बारे में (?"$" देखें) आप पढ़ सकते हैं:

$ is only valid for recursive objects, and is only discussed in the section below on recursive objects.

अब, चलो जाँच करें कि क्या x आरईसी है ursive

> is.recursive(x) 
[1] FALSE 

एक पुनरावर्ती वस्तु में एक सूची जैसी संरचना है।

> x["ed"] 
ed 
2 
: एक वेक्टर नहीं पुनरावर्ती, यह एक परमाणु वस्तु के बजाय, की जाँच

> is.atomic(x) 
[1] TRUE 

इसलिए यदि आपको कोई त्रुटि जब एक वेक्टर (गैर पुनरावर्ती वस्तु) को $ लागू करने के लिए, [ बजाय का उपयोग करते हैं है

तुम भी उपयोग कर सकते हैं getElement

> getElement(x, "ed") 
[1] 2 
8

$ क्योंकि परमाणु वैक्टर पर काम नहीं करता। इसके बजाय [ या [[ का उपयोग करें। $ के लिए मदद फ़ाइल से:

The default methods work somewhat differently for atomic vectors, matrices/arrays and for recursive (list-like, see is.recursive) objects. $ is only valid for recursive objects, and is only discussed in the section below on recursive objects.

x[["ed"]] काम करेंगे।

25

आपको यह त्रुटि मिलने का कारण यह है कि आपके पास vector है।

यदि आप $ ऑपरेटर का उपयोग करना चाहते हैं, तो आपको इसे data.frame पर परिवर्तित करने की आवश्यकता है। लेकिन चूंकि इस विशेष मामले में आपके पास केवल एक पंक्ति है, इसलिए आपको इसे स्थानांतरित करने की भी आवश्यकता होगी; अन्यथा bob और ed आपके कॉलम नामों की बजाय आपकी पंक्ति नाम बन जाएंगे जो मुझे लगता है कि आप चाहते हैं।

x <- c(1, 2) 
x 
names(x) <- c("bob", "ed") 
x <- as.data.frame(t(x)) 
x$ed 
[1] 2 
+3

यह उपयोग करने के लिए आसान होगा 'x <- as.list (एक्स)'। –

+0

हाँ 1 आइटम as.list के लिए बेहतर होगा। मैं सूचियों का कभी भी उपयोग नहीं करता इसलिए मैं हमेशा उनके बारे में भूल जाता हूं। – Dalupus

1

परमाणु संग्रह का उपयोग करने योग्य $

रिकर्सिव संग्रह नहीं कर रहे हैं के द्वारा कर रहे हैं। इसके बजाय [[]] का उपयोग किया जाता है। । ।

Browse[1]> is.atomic(list()) 
[1] FALSE 

Browse[1]> is.atomic(data.frame()) 
[1] FALSE 

Browse[1]> is.atomic(class(list(foo="bar"))) 
[1] TRUE 

Browse[1]> is.atomic(c(" lang ")) 
[1] TRUE 

आर अजीब कभी कभी

a = list(1,2,3) 
b = data.frame(a) 
d = rbind("?",c(b)) 
e = exp(1) 
f = list(d) 
print(data.frame(c(list(f,e)))) 

हो सकता है ... \

X1 X2 X3 X2.71828182845905 
1 ? ? ?   2.718282 
2 1 2 3   2.718282 
+1

मुझे लगता है कि आपके पास यह पीछे है। लिस्ट रिकर्सिव ऑब्जेक्ट्स हैं और $ के माध्यम से पहुंचा जा सकता है, न्यूमेरिक वेक्टर परमाणु हैं और नहीं कर सकते हैं। मुझे यकीन नहीं है कि आप यहां क्या दिखाने की कोशिश कर रहे हैं। –

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