how to call R function from my C++ program
I am inferring that you are using Linux, although you didn't say. Some of my answers are specific to Unix/Linux.
On Sat, 3 May 2003, Yan Yu wrote:
I read the manual, it seems that i have the following two choices:
1) use "eval(R_fcall, rho)" in a C function.
They use an example called lapply2
in C program, it has:
SEXP lapply2(SEXP list, SEXP fn, SEXP rho)
{
.....
PROTECT( R_fcall = lang2(fn, R_nilValue) );
eval(R_fcall, rho)
......
}
but i am a little confused here, it seems like the C function "lapply2()"
is supposed to be called from R, not to be run standalone??
My Q is: if I use this approach, Can I run a standalone C program in which
I call a R function using eval()?
Yes. You can build R as a shared library (libR.so) and link against that. However, you will need to initialize R: see the examples in the directory tests/Embedding in the sources, and the background URL http://developer.r-project.org/embedded.html
2) R have some API entry points for C code. in section 5.12, it says "it is possible to build Mathlib, can be built in directory "src/namth/standalone", and the instructions are supposed in "README" in the same directory. I am wondering using the same procedure, can I build API entry points for other R functions I want to use?
No. (Those are not for R functions, but for parts of R's C API, and considerable work was done to separate out that part of the API to make it work standalone.)
I have another Q, there is no "src" subdirectory in my R directory. i use i386 rpm to install R in my redhat.. i think the version i have now is R-1.6.1-1.i386.rpm.. Any idea where can i find this src subdirectory?
In the sources. You installed a binary version of R. I suspect you will need to build from the sources to build libR.so.
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