From ripley at stats.ox.ac.uk  Wed Dec 28 12:35:57 2005
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Wed, 28 Dec 2005 11:35:57 +0000 (GMT)
Subject: [Rd] NaN in R distribution functions
In-Reply-To: <43B2762B.20403@bfro.uni-lj.si>
References: <43B2762B.20403@bfro.uni-lj.si>
Message-ID: <Pine.LNX.4.61.0512281130200.22424@gannet.stats>

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,                  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



[Rd] NaN in R distribution functions
Prof Brian Ripley