Thomas Lumley
Wed, 13 May 1998 13:01:33 -0700 (PDT)

On Wed, 13 May 1998, Paul Gilbert wrote:

> I need the function all.equal which is in Splus but not yet in R. Below is a
> first cut. Comments would be appreciated.

I think it should return T/F rather than text.  You could have the reason
returned as an attribute or printed as a warning().

Some slight fuzziness in equality for real numbers might make this
function more useful (perhaps it should be optional/settable
eg all.equal(a,b,epsilon=100*.Machine()$double.eps) might use


since rounding error can creep in even with highly accurate computations.
For example, the survival4 library Examples suite has things which are
all.equal() in S-PLUS but differ by perhaps 1e-16 or so in R.

The test for equal values currently uses recycling for objects of
different lengths, so 1:5 and rep(1:5,2) are all.equal(). You would
probably want to insert a test on lengths.

Also, the current version crashes if fed objects whose components are not
	eg a<-lm(y~x); b<-a; all.equal(a,b) gives
	Error: comparison is possible only for vector types
I don't know if this is right or not.


Thomas Lumley
Uni of Washington	
Box 357232		
Seattle WA 98195-7232	

> all.equal <- function(obj1, obj2, ...)
>   {if(mode(obj1)      != mode(obj2) )      return("modes differ.")
>    if(class(obj1)     != class(obj2))      return("classes differ.")
>    if(! all(unlist(attributes(obj1)) == unlist(attributes(obj2))))
>                                            return("attributes differ.")
>    if(! all(unlist(obj1) == unlist(obj2))) return("values differ.")
>    T
>   }
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> r-devel mailing list -- Read
> Send "info", "help", or "[un]subscribe"
> (in the "body", not the subject !)  To:
> _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

r-devel mailing list -- Read
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: