2010-08-03 18 views

Respuesta

20

all.equal pruebas para la igualdad, mientras que identical es más exacto (por ejemplo, no tiene tolerancia a las diferencias y compara el tipo de almacenamiento). De idéntica:?

El ‘all.equal’ función es también a veces se utiliza para probar la igualdad de esta manera , pero estaba destinado a algo diferente: se permite a las pequeñas diferencias en los resultados numéricos.

Y una de las razones que le envuelva en all.equalisTRUE se debe a all.equal se informe de diferencias en lugar de simplemente regresan FALSE.

+2

gracias, 'no tolerancia' fue la clave: 'all.equal (8.0, 9.0, tolerancia = 1.0)' – mariotomo

+0

Otro ejemplo es que 'idéntico()' dirá que las entradas y las longitudes son diferentes, incluso si tienen el mismo valor, mientras que 'all.equal()' dirá que son iguales. – smci

12

identical es más complicado. Por ejemplo:

> identical(as.double(8), as.integer(8)) 
[1] FALSE 
> all.equal(as.double(8), as.integer(8)) 
[1] TRUE 
> as.double(8) == as.integer(8) 
[1] TRUE 
8

Además de las diferencias en la tolerancia numérica y comparación de modo de almacenamiento, a diferencia de all.equal(), identical también prueba la igualdad de entornos asociados. Los objetos normales en R normalmente no tienen entornos asociados, sino que están más comúnmente asociados con los objetos function y formula (y terms). Pero para ilustrar, voy a dar dos objetos triviales diferentes (de nueva creación) ambientes:

x <- 2; environment(x) <- new.env() 
y <- 2; environment(y) <- new.env() 
all.equal(x,y) ## TRUE 
identical(x,y) ## FALSE 

hay un argumento ignore.environment:

ignore.environment: lógica que indica si sus entornos deben ser ignorados cuando comparando cierres.

pero dado que solo se aplica al comparar cierres (es decir, funciones), en este caso no hace la diferencia, ni hará una diferencia al comparar fórmulas o términos de objetos.

Cuestiones relacionadas