2013-01-23 12 views
7

Esiste un equivalente di == ma con il risultato che x != NA se non è NA?R Uguaglianza ignorando NAs

Di seguito fa quello che voglio, ma è goffa:

mapply(identical, vec1, vec2) 

risposta

5

1 == NA restituisce una logica NA piuttosto che TRUE o FALSE. Se si desidera chiamare NAFALSE, si potrebbe aggiungere un secondo condizionale:

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 

Si potrebbe anche usare una seconda fase di lavorazione per convertire tutti i valori NA dal test di uguaglianza a FALSE.

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

Inoltre, per quello che il suo valore, NA == NA rendimenti NA come fa NA != NA.

+0

È un po 'fastidioso dover fare un AND, ma suppongo che non ci sia modo migliore. – Xodarap

+0

Come mai? Cosa vorresti invece proporre? 'NA' si comporta in un modo speciale (quindi' NULL') per ragioni molto importanti! – Justin

+0

Mi rendo conto che il comportamento di '==' è prezioso, ma vorrei che ci fosse un operatore '== '' che si comportava come volevo. (R non consente gli operatori definiti dall'utente, giusto?) – Xodarap