2013-01-23 39 views
7

Có tương đương với == nhưng với kết quả là x != NA nếu x không phải là NA?R Bình đẳng trong khi bỏ qua NA

Sau đây những gì tôi muốn, nhưng đó là phiền phức:

mapply(identical, vec1, vec2) 

Trả lời

5

1 == NA trả về một logic NA hơn TRUE hoặc FALSE. Nếu bạn muốn gọi NAFALSE, bạn có thể thêm một điều kiện thứ hai:

set.seed(1) 
x <- 1:10 
x[4] <- NA 
y <- sample(1:10, 10) 

x <= y 
# [1] TRUE TRUE TRUE NA FALSE TRUE TRUE FALSE TRUE FALSE 

x <= y & !is.na(x) 
# [1] TRUE TRUE TRUE FALSE FALSE TRUE TRUE FALSE TRUE FALSE 

Bạn cũng có thể sử dụng một bước xử lý thứ hai để chuyển đổi tất cả các giá trị từ NA kiểm tra bình đẳng của bạn để FALSE.

foo <- x <= y 
foo[is.na(foo)] <- FALSE 
foo 
# [1] TRUE TRUE TRUE FALSE FALSE TRUE TRUE FALSE TRUE FALSE 

Ngoài ra, cho những gì giá trị của nó, NA == NA lợi nhuận NA cũng như NA != NA.

+0

Thật khó chịu khi phải làm một VÀ, nhưng tôi đoán nếu không có cách nào tốt hơn. – Xodarap

+0

Làm thế nào? Những gì bạn sẽ đề xuất thay thế? 'NA' hoạt động theo một cách đặc biệt (do đó,' NULL') vì những lý do rất quan trọng! – Justin

+0

Tôi nhận ra hành vi của '== 'là có giá trị, nhưng tôi ước có một toán tử' ==' 'hoạt động như thế nào tôi muốn. (R không cho phép các toán tử do người dùng định nghĩa, đúng không?) – Xodarap

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