r – Comparing two vectors in an if statement

r – Comparing two vectors in an if statement

all is one option:

> A <- c(A, B, C, D)
> B <- A
> C <- c(A, C, C, E)

> all(A==B)
[1] TRUE
> all(A==C)
[1] FALSE

But you may have to watch out for recycling:

> D <- c(A,B,A,B)
> E <- c(A,B)
> all(D==E)
[1] TRUE
> all(length(D)==length(E)) && all(D==E)
[1] FALSE

The documentation for length says it currently only outputs an integer of length 1, but that it may change in the future, so thats why I wrapped the length test in all.

Are they identical?

> identical(A,C)
[1] FALSE

Which elements disagree:

> which(A != C)
[1] 2 4

r – Comparing two vectors in an if statement

Id probably use all.equal and which to get the information you want. Its not recommended to use all.equal in an if...else block for some reason, so we wrap it in isTRUE(). See ?all.equal for more:

foo <- function(A,B){
  if (!isTRUE(all.equal(A,B))){
    mismatches <- paste(which(A != B), collapse = ,)
    stop(error the A and B does not match at the following columns: , mismatches )
  } else {
    message(Yahtzee!)
  }
}

And in use:

> foo(A,A)
Yahtzee!
> foo(A,B)
Yahtzee!
> foo(A,C)
Error in foo(A, C) : 
  error the A and B does not match at the following columns: 2,4

Leave a Reply

Your email address will not be published.