2013-04-22 7 views
9

मैं किसी भी विशेष समस्या को हल करने की कोशिश नहीं कर रहा हूं, लेकिन आर सीखने की कोशिश कर रहा हूं और इसके तार्किक अस्वीकरण ऑपरेटर को समझ रहा हूं "!" पेज http://stat.ethz.ch/R-manual/R-devel/library/base/html/Logic.htmlकैसे तार्किक अस्वीकरण ऑपरेटर "!" काम करता है

पर प्रलेखित यह जब = साथ संयोजन में उपयोग मेरे लिए काम करता है, जैसे भाव में:

1 != 2 
TRUE 

लेकिन मैं काफी यह ऑपरेटर के अनुप्रयोग समझ नहीं सकता। उदाहरण के लिए, क्या मैं उस सूची के तत्वों का चयन करने के लिए इसका उपयोग कर सकता हूं जिनके पास विशिष्ट नाम नहीं है। यहाँ ऐसा करने के लिए मेरे प्रयास है, लेकिन यह काम नहीं किया:

vector1 <- 1:5 # just making vector of 5 numbers 
vector2 <- 5:1 # same vector backwards 
list <- list(Forward=vector1, Backwards=vector2) # producing list with two elements 
x = "Forward" 
list[!x] 

मेरे उत्पादन है:

Error in !x : invalid argument type 

जहाँ मेरा तर्क इस मामले में गलत हो जाता है पर किसी भी संकेत की सराहना करेंगे, और अन्य अच्छा क्या कर रहे हैं इस ऑपरेटर के उपयोग को छोड़कर! = केस।

धन्यवाद! सेर्गेई

उत्तर

13

सबसे पहले, यह शायद सबसे अच्छा != पर अभिनय के रूप में != के बारे में सोच नहीं है, बल्कि एक अलग द्विआधारी ऑपरेटर के रूप में पूरी तरह से।

सामान्य रूप से, ! केवल बूलियन वैक्टरों पर ही लागू होना चाहिए। तो यह और अधिक आप के बाद क्या कर रहे हैं की तरह शायद है:

vector1 <- 1:5 # just making vector of 5 numbers 
vector2 <- 5:1 # same vector backwards 
l <- list(Forward=vector1, Backwards=vector2) # producing list with two elements 
x = "Forward" 
l[!(names(l) %in% x)] 

जहां names(l) %in% x सूची l यह बताते हैं कि वे x या नहीं में निहित हैं के नाम के साथ एक बूलियन वेक्टर देता है। आखिरकार, मैंने list को एक चर के रूप में उपयोग से परहेज किया, क्योंकि आप देख सकते हैं कि यह एक काफी आम कार्य है।

+0

जोरेन, स्पष्टीकरण और स्पष्टीकरण के लिए बहुत बहुत धन्यवाद, अब मुझे समझ में आता है। –

8

सबसे पहले, मुझे लगता है कि !!=! ऑपरेटर नहीं है। यह एक विशिष्ट, != ऑपरेटर है, जिसका अर्थ है "अलग से"।

दूसरा, ! ऑपरेटर एक तार्किक एक, तार्किक निषेध है, और यह एक तार्किक वेक्टर के लिए लागू किया जाना चाहिए:

R> !(c(TRUE,FALSE)) 
[1] FALSE TRUE 

संख्या तार्किक करने के लिए मजबूर किया जा सकता है, यह भी एक के लिए लागू किया जा सकता संख्यात्मक वेक्टर। इस मामले में 0FALSE के रूप में विचार किया जाएगा और TRUE के रूप में किसी भी अन्य मूल्य:

R> !c(1,0,-2.5) 
[1] FALSE TRUE FALSE 

अपने उदाहरण में, आप एक चरित्र स्ट्रिंग, जो त्रुटि को जन्म देती है को यह तार्किक ऑपरेटर लागू करने के लिए कोशिश कर रहे हैं।

यदि आप नाम, सूचकांक या शर्तों के आधार पर सूचियों, डेटा फ्रेम या वैक्टरों को सब्सक्राइब करना चाहते हैं, तो आपको आर मैनुअल में वर्णित आर भाषा के अनुक्रमण भाग के बारे में पढ़ना और सीखना चाहिए, और अधिकांश प्रारंभिक पुस्तकें और दस्तावेजों।

एक तरह से नामों से एक सूची सबसेट तक हो सकता है, उदाहरण के लिए:

R> list[!(names(list) %in% "Forward")] 
$Backwards 
[1] 5 4 3 2 1 
9

मैं सब कुछ अन्य दो पोस्टर से कहा से सहमत हैं, लेकिन एक और बात मैं हमेशा बता जब आर शिक्षण जोड़ना चाहते हैं

आर काम करता है कि यह अंदरूनी से बाहर के बयानों का मूल्यांकन करता है और इनमें से प्रत्येक कथन को अपने आप चलाने की जरूरत है। यदि आपके पास पहले से ही एक आंतरिक कथन में कोई त्रुटि है, तो कोई आश्चर्य नहीं कि आउटर्स कुछ भी नहीं बनाते हैं।

आपके मामले में कोई कह सकता है कि आपके पास दो कथन हैं: !x और के माध्यम से list पर पहुंचने की सूची।

आप आर के व्यवहार को दोहराने अगर आप देखते हैं कि !x पहले से ही त्रुटि पैदा करता है:

> !x 
Error in !x : invalid argument type 

इसलिए, सही समाधान इस कदम को बदलने की कोशिश।

तो: त्रुटियों के दौरान हमेशा अपने भीतर के वक्तव्यों की जांच करें और स्वयं को बाहर काम करें।

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