On Mon, 5 Jan 2009, Andreas  Wittmann wrote:

Dear R users,

i would like to transform the following function from R-code to C-code and call it from R in order to speed up the computation because in my other functions this function is called many times.


`dgcpois` <- function(z, lambda1, lambda2)
{
 `f1` <- function(alpha, lambda1, lambda2)
    return(exp(log(lambda1) * (alpha - 1) - lambda2 * lgamma(alpha)))

 `f2` <- function(lambda1, lambda2)
   return(integrate(f1, lower=1, upper=Inf, lambda1=lambda1, 
lambda2=lambda2)$value)

 return(exp(log(lambda1) * z - lambda2 * lgamma(z + 1) -
            log(f2(lambda1=lambda1, lambda2=lambda2))))
}


In order to do this i read for example dgamma.c or dpois.c but for my it seems rather cryptic and so i would like get some advice in writing the c-function. First of all i think i cannot call the integrate r-function from c so i have to use the internal c-function of integrate here?

You can do what integrate() does:

        wk <- .External("call_dqagi", ff, rho = environment(),
            as.double(bound), as.integer(inf), as.double(abs.tol),
            as.double(rel.tol), limit = limit, PACKAGE = "base")

and save a bit of time by doing the setup in integrate once only and call just .External from within your other functions.


Or you can follow the directions in

        Writing R Extensions

...

        6.9 Integration

        The C code underlying integrate can be accessed directly. The user needs
        to supply ....

and also note in '6.7 Numerical analysis subroutines' that the API gives you everything else you need (e.g. lgammafn) for a C version of dgcpois.

HTH,

Chuck



Thanks,

Andreas
--

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Charles C. Berry                            (858) 534-2098
                                            Dept of Family/Preventive Medicine
E mailto:cbe...@tajo.ucsd.edu               UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to