> On May 31, 2018, at 8:25 AM, Jason Serviss <[email protected]> wrote:
>
> Hello all,
>
> I am trying to get a better understanding of the underlying code for the
> stats::dpois function in R and, specifically, what happens under the hood
> when it is called. I finally managed to track down the C course at:
> https://github.com/wch/r-source/blob/trunk/src/nmath/dpois.c. It would seem
> that the dpois C function is taking a double for each of the x and lambda
> arguments so I am a bit confused why I can provide a vector and matrix to
> dpois in R, e.g.
>
> dpois(1:5, matrix(runif(2*5, 1, 10), nrow = 5)))
>
> and get a matrix back with the results. Due to this, I was expecting to see a
> loop, or similar, in the underlying C source but… to no avail. So I have to
> conclude that either a) there is a step between when I call dpois in R and
> the C code getting executed that loops over the inputs or b) that there is a
> construct in the C code (my proficiency here is limited) that is called per
> input. Any help in enlightening me on what code is responsible for iterating
> over the multiple inputs (or if someone is feeling energetic, the exact
> stepwise code that is executed when calling dpois) would be greatly
> appreciated!!
Have a look at arithmetic.c. The math2 function handles calling dpois in a
vectorized fashion.
You need to trace how it is that the compiler knows to use dpois.c in
constructing `C_dpois' which is what the R function dpois is calling.
If you know how to grep the sources for dpois, that will get you started. You
will need to look over a bunch of #define's and a few C utilities to see how it
all fits together.
If you dig in and find the `do { ... } while(0)' construct confusing you might
look at
https://stackoverflow.com/questions/257418/do-while-0-what-is-it-good-for
HTH,
Chuck
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel