Supposons que nous souhaitons tester si deux vecteurs sont égaux. L'approche naïve, utilisant ==, ne fonctionnera pas.

  1. > x <- 1: 3
  2. > y <- c (1,3,4)
  3. > x == y
  4. [1] TRUE FALSE FALSE
Source code
Qu'est-il arrivé? Le point essentiel est que nous traitons de la vectorisation. Tout comme presque n'importe quoi dans R, == est une fonction.
  1. > "==" (3,2) [1] FALSE
  2. > i <- 2
  3. > "==" (i, 2) [1] TRUE
Source code
En fait, == est une fonction vectorisée. L'expression x == y applique la fonction == () aux éléments de x et y. donnant un vecteur de valeurs booléennes.
Que peut-on faire à la place? Une option est de travailler avec la nature vectorisée de ==, en appliquant la fonction all ():
  1. > x <- 1:3
  2. > y <- c(1,3,4)
  3. > x == y
  4. [1] TRUE FALSE FALSE
  5. > all(x == y)
  6. [1] FALSE
Source code
L'application de all() au résultat de == demande si tous les éléments de ce dernier sont vrais, ce qui est identique à savoir si x et y sont identiques.
Ou encore mieux, nous pouvons simplement utiliser la fonction identique, comme ceci:
  1. > identical(x,y)
  2. [1] FALSE
Source code
Soyez prudent, bien que le mot identique signifie vraiment ce qu'il dit. Considérons cette petite session R:
  1. > x <- 1:2
  2. > y <- c(1,2)
  3. > x
  4. [1] 1 2
  5. > y
  6. [1] 1 2
  7. > identical(x,y)
  8. [1] FALSE
  9. > typeof(x)
  10. [1] "integer"
  11. > typeof(y)
  12. [1] "double"
Source code
Ainsi,: produit des nombres entiers tandis que c () produit des nombres à virgule flottante. Qui savait?