From: David Faden <dfaden_at_gmail.com>

Date: Fri 14 Apr 2006 - 17:30:49 GMT

extern int Rf_initEmbeddedR(int argc, char *argv[]);

const double abstol = 1e-16;

const double reltol = 1e-8;

const double alpha = 1.0; /* reflection factor */ const double beta = 0.5; /* contraction factor */ const double gamm = 2.0; /* expansion factor */ const int trace = 0; /* tracing on */

int fncount;

const int maxit = 10000;

printf("convergence code: %d\n", convergenceCode); printf("min of %f at x = %f\n", value, result[0]); return 0;

}

Date: Fri 14 Apr 2006 - 17:30:49 GMT

2006/4/14, Prof Brian Ripley <ripley@stats.ox.ac.uk>:

> You appear to be trying to call nmmin from a standalone program.

*> You linked against -lR, but failed to initialize R, hence the segfault.
**>
**> nmmin is not a part of R that is made available except to a running R
**> process: it is documented in `Writing R Extensions' for use in R packages.
*

Thanks. Initializing R does seem to have fixed the problem. In this, I have followed the code in tests/Embedding, in particular embeddedRCall.c. I was led to this code by Section 7.1 of "Writing R Extensions."

Below is the corrected code and an example session:

#include <R_ext/Applic.h>

#include <stdio.h>

double parabola(int n, double *par, void *ex) {
double xm = par[0] - 1;

return xm * xm + 13;

}

/* * Copied from tests/Embedded/embeddedRCall.c: */

extern int Rf_initEmbeddedR(int argc, char *argv[]);

int main()

{

char *argv[]= {"nmminDemo", "--gui=none", "--silent"};
const int argc = 3;

double initial[1] = {1.5};

double result[1];

double value;

int convergenceCode;

/* * The following values are based on the help * page for optim. */

const double abstol = 1e-16;

const double reltol = 1e-8;

const double alpha = 1.0; /* reflection factor */ const double beta = 0.5; /* contraction factor */ const double gamm = 2.0; /* expansion factor */ const int trace = 0; /* tracing on */

int fncount;

const int maxit = 10000;

Rf_initEmbeddedR(argc, argv);

nmmin(1, initial, result, &value, parabola,

&convergenceCode, abstol, reltol, NULL, alpha, beta, gamm, trace, &fncount, maxit); printf("fncount: %d\n", fncount);

printf("convergence code: %d\n", convergenceCode); printf("min of %f at x = %f\n", value, result[0]); return 0;

}

$ gcc nmminDemo.c -g

-I/Library/Frameworks/R.framework/Versions/2.1.1/Resources/include
-L/Library/Frameworks/R.framework/Versions/2.1.1/Resources/lib -lR
$ R CMD ./a.out

fncount: 24

convergence code: 0

min of 13.000000 at x = 1.000195

-- David Faden, dfaden@iastate.edu AIM: pitulx ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-develReceived on Sat Apr 15 03:59:42 2006

*
This archive was generated by hypermail 2.1.8
: Fri 14 Apr 2006 - 20:17:07 GMT
*