AW: [Rd] Proposal: Generalizing unique() and duplicated()
Kaspar Pflugshaupt
pflugshaupt@geobot.umnw.ethz.ch
Tue, 6 Feb 2001 13:34:01 +0100
On Tuesday 06 February 2001 12:36, Dr. Jens Oehlschlägel wrote:
> I like the idea. Why don't you call duplicated.matrix() directly in
> unique.matrix() and duplicated.data.frame() in unique.data.frame() ?
>
> Jens Oehlschlägel
Good point. I guess I got carried away with using methods (having just gotten
the hang of the concept). :-)
Anyway, here's a corrected version:
----------------------------------------------------
"unique.default" <- get("unique", pos="package:base") # old version becomes
# default behaviour
"unique" <- function(object, ...)
{
if (data.class(object)=="matrix")
return(unique.matrix(object, ...))
else
UseMethod("unique") # doesn't seem to work for matrices, hence
} # the condition
"duplicated.default" <- get("duplicated", pos="package:base")
"duplicated" <- function(object, ...)
{
if (data.class(object)=="matrix")
return(duplicated.matrix(object, ...))
else
UseMethod("duplicated")
}
"duplicated.matrix" <-
function(mat, MARGIN=1) # defaulting to work on rows
{
strvect <- drop(apply(mat, MARGIN, function(x) paste(x, collapse = "\r")))
return(duplicated(strvect))
}
"unique.matrix" <-
function(mat, MARGIN=1) # defaulting to work on rows
{
dup <- duplicated.matrix(mat, MARGIN)
return(if (MARGIN==1) mat[!dup,] else mat[,!dup])
}
"duplicated.data.frame" <-
function(df, MARGIN=1)
{
strvect <- drop(apply(as.matrix(df), MARGIN, function(x) paste(x, collapse
= "\r")))
duplicated(strvect)
}
"unique.data.frame" <-
function(df, MARGIN=1)
{
dup <- duplicated.data.frame(df, MARGIN)
return(if (MARGIN==1) df[!dup,] else df[,!dup])
}
----------------------------------------------------
Cheers
Kaspar Pflugshaupt
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._