Re: [R] Desolve package: How to pass thousand of parameters to C compiled code?

From: Thomas Petzoldt <thpe_at_simecol.de>
Date: Fri, 11 Jun 2010 09:54:16 +0200

On 6/8/2010 2:03 PM, Ben Bolker wrote:
> <cmmu_mile<at> yahoo.com> writes:
>
>>
>> Hi,
>>
>> I have used DeSolve package for my ODE problem regarding
>> infectious disease transmission and currently am
>> trying to pass lots (roughly a thousand) of model parameters
>> to the C compiled model (I have to use C
>> compiled code instead of R code purely because of the speed).
>>
>> I can't go define it one by one as it gonna take ages to finish
>> and also quite difficult to revise. I have read
>> the instructions in "Writing Code in Compiled Languages", which
>> is very well written, but still have no
>> clue on how to proceed.
>>
>> Please can anyone suggest the best way to go about this, and also the places
> where I can find examples of
>> DeSolve C compiled code.
>>
>
> There's another example of compiled code in
> http://www.jstatsoft.org/v33/i09/paper , but it probably
> won't say anything the 'Writing Code' guide doesn't already
> cover. I found the guide pretty complete ...
>
> I would suggest that you pack your parameters into a single
> numeric vector (or several, if that makes more sense) and pass
> them that way.
> What kind of infectious disease data do you have that will
> allow you to fit a model with thousands of parameters ... ??
> (Just curious.)

I agree in using vectors (and matrices) like recommended by Ben. In addition, you may consider to use structures and unions instead of #define macros:

union my_parms_vec {

   struct {double foo1, foo2, bar[15];};    double value[18];
};

static my_parms_vec p;

// ...

// This structure has then to be initialized // as vector 'value' in initmod:

/* initializer */
void initmod(void (* odeparms)(int *, double *)) {

     int N=3;
     odeparms(&N, p.value);

}

// so that you can use constructs like

p.foo or p.bar[7] in your model (i.e. derivs) function.

With respect of the large number of parameters you may think whether they are really "parameters" and not something like external forcings, for which recent versions of deSolve have separate mechanisms to deal with. See ?forcings

Hope it helps

Thomas Petzoldt

PS: There is also a dedicated mailing list for discussions like this: https://stat.ethz.ch/mailman/listinfo/r-sig-dynamic-models



R-help_at_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. Received on Fri 11 Jun 2010 - 07:56:17 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 11 Jun 2010 - 08:50:29 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive