Skip to content

Extending deriv3()

4 messages · Thomas Yee, Brian Ripley, Gabor Grothendieck

#
Hello,

I was wondering if the functions deriv3(), deriv() etc. could be extended
to handle psigamma() and its special cases (digamma(), trigamma()
etc.). From the error message it seems that 'psigamma' needs to be
added to the derivatives table.
This might be easy since psigamma() has a deriv argument.

Additionally, this error message is also obtained when requesting for
the Hessian of the gamma and lgamma functions:

d3 = deriv(~  gamma(y), namev="y", hessian= TRUE)
d3 = deriv(~ lgamma(y), namev="y", hessian= TRUE)

Another class of special functions worth adding are the Bessel functions.

Thanks

Thomas
#
On Mon, 15 Oct 2007, Thomas Yee wrote:

            
If you look at ?deriv you will see that it only knows about functions *of 
one argument* and operators.  So it would be easy to add digamma(x) and 
psigamma(x) (and I will do so shortly), it would not be so easy to add 
psigamma(x, deriv).
Well, you can always submit a patch ....

Note that deriv() in R differs from that in S in being done in C and hence 
not being user-extensible.  A long time ago that had an advantage: S's 
deriv could be very slow and take a lot of memory by the standards of the 
early 1990's.  Rather than work on adding yet more special cases it would 
seem better to work on making it user-extensible.
#
If you are modifying it it would also be nice to add
{ to the derivative table so one can write this:

    f <- function(x) x*x
    deriv(body(f), "x", func = TRUE)

Currently, one must do:

    deriv(body(f)[[2]], "x", func = TRUE)
On 10/15/07, Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote:
#
BTW, this has come up several times before, e.g.

http://tolstoy.newcastle.edu.au/R/e2/help/07/08/22447.html

is a call for patches.
On Mon, 15 Oct 2007, Prof Brian Ripley wrote:

            
I've now implemented that in R-devel, including the 'not so easy' case.