कैसे जांचा जाए कि किसी वेक्टर में दिए गए मान हैं या नहीं?
%
फ़्लैंकिंग -signs के अलावा के साथ है। यह शब्द in
आर-फॉर लूप कंस्ट्रक्शन में एक आरक्षित शब्द है।
select(iris, contains("etal"))
।
कैसे जांचा जाए कि किसी वेक्टर में दिए गए मान हैं या नहीं?
%
फ़्लैंकिंग -signs के अलावा के साथ है। यह शब्द in
आर-फॉर लूप कंस्ट्रक्शन में एक आरक्षित शब्द है।
select(iris, contains("etal"))
।
जवाबों:
दोनों match()
(पहली उपस्थिति लौटाता है) और %in%
(एक बूलियन देता है) फ़ंक्शन इसके लिए डिज़ाइन किए गए हैं।
v <- c('a','b','c','e')
'b' %in% v
## returns TRUE
match('b',v)
## returns the first location of 'b', in this case: 2
which(v, 'b')
। तर्कों के क्रम का ध्यान रखें।
which(v, 'b')
मुझे एक त्रुटि संदेश देता है:> त्रुटि जिसमें (v, 'b'): तर्क 'जो' तार्किक नहीं है
is.element()
अधिक पठनीय कोड के लिए बनाता है, और इसके समान है %in%
v <- c('a','b','c','e')
is.element('b', v)
'b' %in% v
## both return TRUE
is.element('f', v)
'f' %in% v
## both return FALSE
subv <- c('a', 'f')
subv %in% v
## returns a vector TRUE FALSE
is.element(subv, v)
## returns a vector TRUE FALSE
is.element(x, y) is identical to x %in% y
। लेकिन, मुझे नहीं पता क्यों, is.elements
काम करता है जब पूर्णांकों और numerics मिश्रण और %in%
नहीं है
is.element()
बनाम %in%
व्यक्तिपरक है। एक मामला बनाया जा सकता है कि एक इन्फिक्स ऑपरेटर अधिक पठनीय है क्योंकि यह तर्कों के क्रम में अस्पष्टता को समाप्त करता है। apple in fruit
समझ में आता है, fruit in apple
नहीं। is.element(apple, fruit)
या फ़ंक्शन के is.element(fruit, apple)
कार्यान्वयन के आधार पर दोनों सही हो सकते हैं is.element
।
मैं आउटपुट के आधार पर विकल्पों को समूहित करूंगा। सभी उदाहरणों के लिए निम्न वेक्टर मान लें।
v <- c('z', 'a','b','a','e')
उपस्थिति की जाँच के लिए:
% में%
> 'a' %in% v
[1] TRUE
कोई भी()
> any('a'==v)
[1] TRUE
is.element ()
> is.element('a', v)
[1] TRUE
पहली बार खोजने के लिए:
से मेल ()
> match('a', v)
[1] 2
सूचकांकों के वेक्टर के रूप में सभी घटनाओं को खोजने के लिए:
कौन कौन से()
> which('a' == v)
[1] 2 4
तार्किक वेक्टर के रूप में सभी घटनाओं को खोजने के लिए :
==
> 'a' == v
[1] FALSE TRUE FALSE TRUE FALSE
संपादित करें: टिप्पणियों में वर्णित कारण के लिए सूची से grep () और grepl () हटाना
किसी भी () पठनीय कोड के लिए समारोह बनाता है
> w <- c(1,2,3)
> any(w==1)
[1] TRUE
> v <- c('a','b','c')
> any(v=='b')
[1] TRUE
> any(v=='f')
[1] FALSE
%in%
: any(1==NA)
रिटर्न NA
, जहां 1 %in% NA
रिटर्न FALSE
।
any(1==NA, na.rm=TRUE)
रिटर्न FALSE
।
तत्व की स्थिति को खोजने के लिए "जो" का उपयोग किया जा सकता है
pop <- c(3,4,5,7,13)
which(pop==13)
और उन तत्वों को खोजने के लिए जो लक्ष्य वेक्टर में निहित नहीं हैं, एक ऐसा कर सकता है:
pop <- c(1,2,4,6,10)
Tset <- c(2,10,7) # Target set
pop[which(!(pop%in%Tset))]
which
वास्तव में बेहतर है कभी-कभी इसके लिए आपको इसके विपरीत सभी मिलान स्थिति (एक सरणी के रूप में) मिलती है match
। हालांकि इस शायद नहीं था क्या ओ पी के लिए, के विपरीत पूछा stackoverflow.com/questions/1169388/...
which
अगर आप तत्वों को नहीं ढूंढना चाहते हैं तो परेशान क्यों हों Tset
? आप बस pop
सीधे सूचकांक कर सकते हैं; pop[!pop%in%Tset]
मैं वास्तव में इस उद्देश्य के लिए grep () और grepl () पसंद करता हूं।
grep () पूर्णांक का एक वेक्टर देता है, जो इंगित करता है कि मैच कहां हैं।
yo <- c("a", "a", "b", "b", "c", "c")
grep("b", yo)
[1] 3 4
grepl () मैचों के स्थान पर "TRUE" के साथ एक तार्किक वेक्टर देता है।
yo <- c("a", "a", "b", "b", "c", "c")
grepl("b", yo)
[1] FALSE FALSE TRUE TRUE FALSE FALSE
ये कार्य केस-संवेदी हैं।
grep
अपने पहले तत्व के रूप में एक नियमित अभिव्यक्ति लेता है, इसलिए "b"
या तो उपयोग के लिए एक सटीक मिलान करना है^e$
या या जोड़ने के, fixed=TRUE
)।