[Rd] choose incorrect for fractional and some negative integer values (PR#10766)

Ben Bolker bolker at ufl.edu
Wed Mar 19 23:15:27 CET 2008


 <jerry.lewis <at> biogenidec.com> writes:

> 
> choose(-5,-7) uses integer arguments (as specified in Help)  and returns a 
> numeric value that is incorrect.  Either the function or the documentation 
> should be fixed.  If the function is not fixed, a warning or an error 
> would be helpful.
> 
> The fact that choose(n,k) usually returns choose(n,round(k,0)) is not 
> obvious from either the output or the documentation.  I suggest issuing a 
> warning when k is not an integer; a user might easily expect that choose 
> would coerce both arguments to integers, but only coercing k to an integer 
> is unusual and potentially misleading.

  Although perhaps (?) expected from a close reading of the documentation, which
says that n is real and k must be integer ...

> 
> The fact that choose(n,k) always rounds .5 up in k (contrary to the round 
> function documentation) is nowhere documented.
> 
> Help for coerce would lead a reader to expect k to be truncated toward 
> zero (as.integer), instead of rounding it.
> 

   Not being an R-core member I can't say it would be accepted, but since your
arguments seem to make sense it would be helpful if you could provide patches to
implement your suggested changes -- and perhaps a set of test code to
demonstrate the range of behaviors you are proposing.  

   The rounding behavior (   return R_IS_INT(n) ? floor(r + 0.5) : r; in C code)
is commented as "/* might have got rounding errors */", so I think it's intended
as a way to get the desired answer when a little bit of numeric fuzz is present
-- but I agree it seems like overkill.  I don't know whether R-core members have
on the top of their heads the standard ways of dealing with this situation ...

  Ben Bolker



More information about the R-devel mailing list