From Martin Maechler <maechler@stat.math.ethz.ch>  Tue Nov 21 14:51:08 2000
From: Martin Maechler <maechler@stat.math.ethz.ch> (Martin Maechler)
Date: Tue, 21 Nov 2000 15:51:08 +0100
Subject: [Rd] Re: precision, incorrect(?) tapply() NA's
In-Reply-To: <200011201516.KAA26803@jessie.research.bell-labs.com>
References: <200011201516.KAA26803@jessie.research.bell-labs.com>
Message-ID: <14874.35804.101468.347291@gargle.gargle.HOWL>


>>>>> "DJ" == David James <dj@research.bell-labs.com> writes:

{diverted from R-help to R-devel }

    DJ> Summary:

    DJ> I ran into some unexpected behavior in approx() and tapply() that
    DJ> introduced NA's in "clean" data due to (?) numerical accuracy/round
    DJ> off.  The culprit seems to be in match() that coerces it's
    DJ> arguments to character, loosing precision in the process.

yes, definitely!
match() shouldn't do the character coercion!  
==> This is a bug; I'll send a report

	...........

    DJ> Thus match() seems to be introducing the round off as it coerces its 
    DJ> arguments to character:

    >> match
    DJ> function (x, table, nomatch = NA) 
    DJ> .Internal(match(as.character(x), as.character(table), nomatch))

	.......

If you look at R's source { do_match() in src/main/unique.c },
it becomes clear that the .Internal(match(.))
does not rely at all on character inputs,
and

    match <- function (x, table, nomatch = NA) 
	   .Internal(match(x, table, nomatch))

*seems* to work alright.
But, alas, it only *seems*, since the above change
breaks 
       "make check"

more concretely,
     example(relevel)
leads to an error {when the above changed  match() function is used}
which can be diagnosed to  factor(.,.) not working anymore with the changed 
match() function.  I've seen how to fix factor(.,.) as well,
but this is coming involved.

I think that the above change is *really* what we should use,
but we the consequences must be taken care as well.
Expect a fix for R 1.2,
and thank you very much for your useful report!

Martin Maechler <maechler@stat.math.ethz.ch>	http://stat.ethz.ch/~maechler/
Seminar fuer Statistik, ETH-Zentrum  LEO D10	Leonhardstr. 27
ETH (Federal Inst. Technology)	8092 Zurich	SWITZERLAND
phone: x-41-1-632-3408		fax: ...-1228			<><
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


[Rd] Re: precision, incorrect(?) tapply() NA's
Martin Maechler