# [R] NA treatment when comparing two vectors

William Dunlap wdunlap at tibco.com
Tue Oct 4 21:02:25 CEST 2016

```The all.equal function returns TRUE if two objects are pretty similar to
one another and a textual description of the differences if not.  Use
isTRUE on its output if you just want a TRUE/FALSE answer.

> all.equal(c(1,2*(1+.Machine\$double.eps),NaN), c(1,2,NaN))
 TRUE
> all.equal(c(1,2*(1+.Machine\$double.eps),NaN), c(1,2,NaN), tolerance=0)
 "Mean relative difference: 2.220446e-16"
> isTRUE(all.equal(c(1,2*(1+.Machine\$double.eps),NaN), c(1,2,NaN),
tolerance=0))
 FALSE
> all.equal(c(a=1, b=2), c(x=1, b=2))
 "Names: 1 string mismatch"

Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Tue, Oct 4, 2016 at 9:51 AM, fabien verger <fabien.verger at gmail.com>
wrote:

> Hello,
>
> I want to get the differences when comparing 2 vectors, by pair (element by
> element).
> I'd like to get TRUEs when:
> - the two compared elements are different and non-missing (like `!=` does)
> - one element is missing and the other is not missing (unfortunatelly `!=`
> gives NA and not TRUE)
> Note that I don't want to get TRUEs when both are missing. NA or FALSE are
> fine.
>
> Given a and b:
> > a <- c(1, 2, 3,  NA, NA)
> > b <- c(1, 9, NA, 4 , NA)
>
> The only solution I found is:
>
> > a != b | (is.na(a) != is.na(b))
>  FALSE  TRUE  TRUE  TRUE    NA
>
> Is there a single function which can do the same?
> I searched for other comparison tools but found nothing relevant.
>
> And I would like also to avoid using `!=` because I'm often comparing
> floating numbers computed by different algorithms (so rounded differently).
>
> I found identical() interesting (for exemple, !(identical(NA, 99)) gives
> TRUE) but the result of !(identical(a, b) is a single logical, not a vector
> of logicals.
>
> P.S. I am new to R, coming from SAS. Actually, I'm looking for the R
> function that replicates the SAS instruction: if a ^= b;
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help