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, [EMAIL PROTECTED] 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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel