> On May 31, 2018, at 8:25 AM, Jason Serviss <jason.serv...@ki.se> 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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel