set functions

Jonathan Rougier J.C.Rougier@durham.ac.uk
Tue, 4 Jan 2000 16:45:12 +0000 (GMT)


On 4 Jan 2000, Peter Dalgaard BSA wrote:

> > length(setdiff(1:4, 1:5))==0	# is TRUE
> > equiv(1:4, 1:5)			# clearly FALSE
> 
> Argh. I was thinking of the symmetric set difference. So you'd need 
> setdiff(y,x)==0 & setdiff(x,y)==0 which is obviously only half as fast
> as twice as fast....
> 
> However:
> 
> equiv<-function(x,y) 
>     length(x<-unique(x))==length(y<-unique(y)) && 
>     all(sort(x)==sort(y)) 

Yes, I wondered about that, and also about

"equiv" <-
function(x, y) {
  x <- unique(x)
  y <- unique(y)
  length(x)==length(y) && all(1:length(y) == sort(match(x, y, 0)))
}

but I thought that perhaps a sort would be more expensive than a second
call to match, and more so for two sorts.  Cheers, Jonathan.

Jonathan Rougier                       Science Laboratories
Department of Mathematical Sciences    South Road
University of Durham                   Durham DH1 3LE

"[B]egin upon the precept ... that the things we see are to be 
 weighed in the scale with what we know"  (Meredith, 1879, The Egoist)


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._