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

Martin Maechler maechler at stat.math.ethz.ch
Thu Nov 17 12:20:21 CET 2011


> 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()



More information about the R-devel mailing list