Un curioso bug de R

A vueltas con los bugs, el otro día leí sobre uno bastante curioso de R. En resumen:

> a <- c(1,2, sqrt( 2) ^ 2 )
> table(a)
a
1 2
1 2
> unique(a)
[1] 1 2 2

¿El motivo? La función unique compara el valor numérico de los valores del vector de manera que le afectan los errores de redondeo. Sin embargo, la función table compara los valores de acuerdo con su representación como cadena de caracteres.

> 2 - sqrt(2) ^ 2
[1] -4.4409e-16
> as.character(c(2, sqrt(2)^2))
[1] "2" "2"

Los entusiastas de R pueden comprobar todo lo anterior examinando (¡que es una buena costumbre!) el código de ambas funciones.