2010-08-03 22 views

risposta

20

all.equal test per l'uguaglianza, mentre identical è più esatto (ad esempio non ha tolleranza per le differenze e confronta il tipo di memoria). Da identiche:

Il ‘all.equal’ funzione è anche talvolta utilizzato per testare l'uguaglianza questo modo , ma era destinato a qualcosa di diverso : permette per piccoli differenze nei risultati numerici.

E uno dei motivi che ci si avvolgere all.equal in isTRUE è perché all.equal volontà rapporto differenze, piuttosto che semplicemente ritornano FALSE.

+2

grazie, 'nessuna tolleranza' era la chiave: 'all.equal (8.0, 9.0, tolleranza = 1.0)' – mariotomo

+0

Un altro esempio è che 'identico()' dirà ints e longs sono diversi, anche se hanno il stesso valore, mentre 'all.equal()' dirà che sono uguali. – smci

12

identical è più faticoso. Ad esempio:

> 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

Oltre alle differenze di tolleranza numerica e confronto delle modalità di memorizzazione, a differenza all.equal(), identical tests anche parità di ambienti associati. Normalmente gli oggetti in R non hanno ambienti associati - sono più comunemente associati agli oggetti function e-(e terms). Ma per illustrare, ti darò due oggetti banali diversi (di nuova creazione) ambienti:

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

C'è un ignore.environment argomento:

ignore.environment: logico che indica se i loro ambienti dovrebbero essere ignorati quando confrontando chiusure.

ma poiché viene applicato solo quando si confrontano le chiusure (ovvero le funzioni), in questo caso non fa alcuna differenza, né fa la differenza quando si confrontano formule o termini oggetti.

Problemi correlati