2011-12-02 34 views
21

Tôi gặp khó khăn với độ nhạy trường hợp. Chúng ta có thể tắt nó đi được không?tắt độ nhạy trường hợp trong r

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 

nên tất cả TRUE

Trả lời

29

Không có cách nào để tắt nhạy trường hợp ==, nhưng ép buộc cả hai vectơ nhân vật sang chữ hoa và sau đó thử nghiệm cho sự bình đẳng số tiền để điều tương tự:

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

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

Như Josh O'Brien đã nói. Để mở rộng một chút về khớp caseless trong R, đó là thực sự có thể với biểu thức thông thường (sử dụng ví dụ grepgrepl)

Trong trường hợp này bạn có thể sử dụng mapplygrepl như thế này, với điều kiện bạn đang phù hợp với nhân vật duy nhất:

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 

bạn phải cẩn thận mặc dù, bởi vì nó cũng phù hợp với chuỗi từng phần như thế này:

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 

này có thể hoặc không thể là những gì bạn muốn.

Trên một sidenote, nếu bạn kết hợp với biểu thức thông thường và bạn muốn bỏ qua trường hợp này, bạn cũng có thể sử dụng xây dựng (?i) bật phù hợp caseless và (?-i) để tắt khớp caseless:

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 Đó là một bổ sung thú vị và mang tính thông tin. Nếu bạn muốn sử dụng 'grepl' và _not_ chấp nhận các kết quả chuỗi con, tôi giả sử bạn có thể làm' mapply (grepl, A1, C1, ignore.case = TRUE) & mapply (grepl, C1, A1, ignore.case = TRUE) ' . –

+0

@ JoshO'Brien: Bạn thực sự có thể, nhưng cấu trúc đó dường như không nổi trội về hiệu quả ... ;-) –

+0

Yup. Và trong bất cứ điều gì trái ngược với mã sân golf là, nó là một ứng cử viên! –

Các vấn đề liên quan