[R] Why does match() treat NaN's as compables; Bug or Feature?

Bert Gunter bgunter.4567 at gmail.com
Sun Feb 28 00:34:34 CET 2016


If I understand you correctly, the "bug" is that you do not understand
match(). See inline comment below and note carefully the "Value"
section of ?match.

Cheers,
Bert

Bert Gunter

"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Sat, Feb 27, 2016 at 2:52 PM, Jason Thorpe <jdthorpe at gmail.com> wrote:
> For some reason `match()` treats `NaN`'s as comparables by default:
>
>> x <- c(1,2,3,NaN,4,5)
>> match(x,x)
> [1] 1 2 3 4 5 6
>
> which I can override when using `match()` directly:
>
>> match(x,x,incomparables=NaN)
> [1]  1  2  3 NA  5  6
>
> but not necessarily when calling a function that uses `match()` internally:
>
>> stats::ecdf(x)(x)
> [1] 0.2 0.4 0.6 0.8 0.8 1.0
>
> Obviously there are workarounds for any given scenario, but the bigger
> problem is that this behavior causes difficult to discover bugs.  For
> example, the behavior of stats::ecdf is definitely a bug introduced by it's
> use of `match()` (unless you think NaN == 4 is correct).

No, you misunderstand. match() returns the POSITION of the match, and
clearly NaN in the 4th position of table =x matches NaN in x. e.g.

> match(c(x,NaN),x)
[1] 1 2 3 4 5 6 4



>
> Is there a good reason that NaN's are treated as comparables by match(), or
> his this a bug?
>
> For reference, I'm using R version 3.2.3
>
> -Jason
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list