[R] Different behaviour of unique(), R vs. Splus.

Rolf Turner rolf at math.unb.ca
Tue Jun 29 17:20:52 CEST 2004


Apologies for the cross-posting, but I thought this snippet of info
might be vaguely interesting to both lists.

I did a ***brief*** search to see if this issue had previously been
discussed and found nothing.  So I thought I'd tell the list about a
difference in behaviour between unique() in R and unique() in Splus
which bit me just now.

I was trying to convert a package from Splus to R and got nonsense
answers in R.  Turned out that within the bowels of the package I was
doing something like

	u <- unique(y)

where y was a matrix of integer values.  In Splus this gives a
(short) vector of unique values.  In R it gives a matrix of the same
dimensionality as y, except that any duplicated rows are eliminated.

(This looks like being very useful --- once you know about it.  And
it was probably mentioned in the R release notes at one time, but, as
Dr. Hook says, ``I was stoned and I missed it.'')

E.g.
	set.seed(42)
	m <- matrix(sample(1:5,20,TRUE),5,4)
	u <- unique(m)

In R ``u'' is identical to ``m''; in Splus ``u'' is vector (of
length 5).

To get what I want in R I simply need to do

	u <- unique(as.vector(y))

Simple, once you know.  Took me a devil of a long time to track down
what was going wrong, but!

					cheers,

						Rolf Turner




More information about the R-help mailing list