[Rd] NaN in R distribution functions

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed Dec 28 12:35:57 CET 2005

On Wed, 28 Dec 2005, Gregor Gorjanc wrote:

> Dear R developers,
> I noticed that core R distribution functions return NaN, when parameter
> values are out of parameter space. I have looked in source code and
> found that warnings and return of NaN are done internally in C code. For
> dgamma.c the line 49 is:
>     if (shape <= 0 || scale <= 0) ML_ERR_return_NAN;
> OK. How should this be implemented if distribution functions are written
> directly in R? I came up with this
>     if (any(shape <= 0)) {
>         warning("shape must be positive")
>         return(NaN)
>     }

As the R-level code is vectorized, NaN is unlikely to be the appropriate 
return value. You will find that only the relevant entries are NaN, for 

> dgamma(1, shape=-1:2)
[1]       NaN       NaN 0.3678794 0.3678794
Warning message:
NaNs produced in: dgamma(x, shape, scale, log)

> I think that it would be nice that returning NaN for undefined parameter
> values in distribution functions would also be documented in Writing R
> Extension.

It is purely a convention for use in the standalone libRmath with which 
the code is shared.  Otherwise returning NA or giving an error would seem 
more appropriate.

`Writing R Extensions' does not cover writing distribution functions, and 
is certainly not intended to mandate how such extensions are written.

Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

More information about the R-devel mailing list