Re: [Rd] NaN in R distribution functions

From: Prof Brian Ripley <>
Date: Wed 28 Dec 2005 - 11:35:57 GMT

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 example

> 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,        
Professor of Applied Statistics,
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________ mailing list
Received on Wed Dec 28 22:40:54 2005

This archive was generated by hypermail 2.1.8 : Mon 20 Feb 2006 - 03:21:35 GMT