[R] Foreign code problem

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed Oct 6 13:22:13 CEST 2004

On Wed, 6 Oct 2004, Rolf Wester wrote:

> Hello,
> I wanted to test the odesolve package and tried to use compiled C-code.
> But when I do:
> erg <- lsoda(y, times, "mond", parms, rtol, atol, tcrit=NULL, jacfunc=NULL,
>                verbose=FALSE, dllname="mond", hmin=0, hmax=Inf)
> I get the error message:
> Error in lsoda(y, times, "mond", parms, rtol, atol, tcrit = NULL,             
>                jacfunc = NULL,  : 
>     Unable to find mond in mond

Well, ?lsoda says

          If 'func' is a string, then 'dllname' must give the name of
          the shared library (without extension) which must be loaded
          before 'lsoda()' is called.

Have you loaded it (with dyn.load)?  The example in 
dynload/c/testdynload.R may help you.

> The C code is:
> #include <math.h>
> void mond(long int *neq, double *t, double *y, double *ydot)
> {
> 	double a = sqrt(y[2]*y[2] + y[4]*y[4]);
> 	a = -1.0/(a*a*a);
> 	ydot[0] = a*y[1];
> 	ydot[1] = y[0]; 
> 	ydot[2] = a*y[3];
> 	ydot[3] = y[2];
> }
> and mond.so is build by:
> gcc -O3 -shared mond.c -lm -o mond.so
> I have set LD_LIBRARY_PATH to the correct directory and also tried to
> use the full path of mond.so in the call to lsoda but got the same error
> message. I would be very appreciative for help in order to understand
> how compiled code can be used from within R.

> Besides this I have a further question. Am I right that every function
> argument is copyied when calling a function, even if the argument is a
> huge matrix? Wouldn't that be very inefficient?

It would be.  It is marked for potential copying, but the copy only occurs 
when the potential copy is changed

Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

More information about the R-help mailing list