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