From maechler at stat.math.ethz.ch  Thu Nov 17 12:20:21 2011
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Thu, 17 Nov 2011 12:20:21 +0100
Subject: [Rd] inaccuracy in man page for duplicated() + anyDuplicated()
 not working with MARGIN=0
In-Reply-To: <4EC4AC57.5030007@fhcrc.org>
References: <4EC4AC57.5030007@fhcrc.org>
Message-ID: <20164.60917.946391.189174@stat.math.ethz.ch>


> Hi,
> In man page for duplicated:

>    Value:

>       ?duplicated()?: For a vector input, a logical vector of the same
>       length as ?x?.  For a data frame, a logical vector with one
>       element for each row.  For a matrix or array, a logical array with
>       the same dimensions and dimnames.

> When 'x' is a matrix or array, the returned value is NOT a logical
> array:

>    > m <- matrix(c(3,2,7,6,2,7), nrow=3)
>    > m
>         [,1] [,2]
>    [1,]    3    6
>    [2,]    2    2
>    [3,]    7    7
>    > duplicated(m)
>    [1] FALSE FALSE FALSE

> Only if MARGIN=0 it seems:

>    > duplicated(m, MARGIN=0)
>          [,1]  [,2]
>    [1,] FALSE FALSE
>    [2,] FALSE  TRUE
>    [3,] FALSE  TRUE

Indeed. Thank you for pointing this out.
I'll definitely fix that part of the help file.

> Also, any reason why this doesn't work?

>    > anyDuplicated(m, MARGIN=0)
>    Error in dim(newX) <- c(prod(d.call), d2) :
>      dims [product 1] do not match the length of object [6]

well, because the R core colleague enhanced duplicated.array()
to work with MARGIN 0 (and similar cases) did not
update the parallel code in anyDuplicated.array() correspondingly.

> May be it could be equivalent to:

>    > anyDuplicated(as.vector(m))
>    [1] 5

Yes, that's what will happen after I've committed my fixes.

Thank you very much, Herv?!
Martin

[...]

> -- 
> Herv? Pag?s
[...]

(*) having authored anyDuplicated()



[Rd] inaccuracy in man page for duplicated() + anyDuplicated() not working with MARGIN=0
Martin Maechler