आर

2011-12-02 5 views
21

में केस संवेदनशीलता को बंद करना मुझे केस संवेदनशीलता में कठिनाई हो रही है। क्या हम इसे बंद कर सकते हैं?आर

A1 <- c("a", "A", "a", "a", "A", "A", "a") 
B1 <- c(rep("a", length(A1))) 

A1 == B1 
# [1] TRUE FALSE TRUE TRUE FALSE FALSE TRUE 

सभी TRUE

उत्तर

29

होना चाहिए कोई रास्ता नहीं == के मामले संवेदनशीलता बंद करने के लिए नहीं है, लेकिन दोनों चरित्र वैक्टर coercing को अपरकेस में और समानता के लिए तो परीक्षण एक ही बात के बराबर है:

toupper(A1) 
[1] "A" "A" "A" "A" "A" "A" "A" 

toupper(A1)==toupper(B1) 
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
21

जैसा कि जोश ओ'ब्रायन ने कहा। आर में caseless मिलान पर थोड़ा विस्तार करने के लिए, कि वास्तव में नियमित अभिव्यक्ति

(जैसे grep और grepl का प्रयोग करके) इस मामले में आप mapply और grepl इस तरह इस्तेमाल कर सकते हैं के साथ संभव है, बशर्ते आप एकल वर्ण मिलान कर रहे हैं:

C1 <- rep('ab',length(A1)) 
mapply(grepl,A1,C1,ignore.case=TRUE) 
# a A a a A A a 
# TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

यह या आप क्या चाहते हैं नहीं हो सकता है हो सकता है:

A1 <- c("a", "A", "a", "a", "A", "A", "a") 
B1 <- c(rep("a", length(A1))) 

mapply(grepl,A1,B1,ignore.case=TRUE) 
# a A a a A A a 
# TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

आप, क्योंकि यह भी इस तरह आंशिक स्ट्रिंग के से मेल खाता है, हालांकि सावधान रहना होगा।

D1 <- c('abc','aBc','Abc','ABc','aBC') 

grepl('a(?i)bc',D1) # caseless matching on B and C 
# [1] TRUE TRUE FALSE FALSE TRUE 

grepl('a(?i)b(?-i)c',D1) # caseless matching only on B 
# [1] TRUE TRUE FALSE FALSE FALSE 
+1

+1:

एक sidenote पर, यदि आप नियमित अभिव्यक्ति के साथ मेल खाते हैं और आप मामले को अनदेखा करना चाहते हैं, आप भी caseless मिलान चालू करने के लिए का निर्माण (?i) उपयोग कर सकते हैं और (?-i) caseless मिलान बंद करने के लिए यह एक मजेदार और सूचनात्मक जोड़ है। यदि आप 'grepl' और _not_ को सबस्ट्रिंग मैचों को स्वीकार नहीं करना चाहते हैं, तो मुझे लगता है कि आप' mapply (grepl, a1, c1, ignore.case = TRUE) और मैप्ली (grepl, c1, A1, ignore.case = TRUE) कर सकते हैं। । –

+0

@ जोशो'ब्रायन: आप वास्तव में कर सकते हैं, लेकिन वह संरचना दक्षता में उत्कृष्टता के लिए असंभव है ... ;-) –

+0

यूप। और कोड गोल्फ के विपरीत जो कुछ भी है, यह एक प्रतियोगी है! –