Re: [Rd] calling an R-function from C

From: Duncan Murdoch <murdoch_at_stats.uwo.ca>
Date: Sun 27 Feb 2005 - 08:21:11 EST

On Sat, 26 Feb 2005 21:45:36 +0200, Ralf ÷stermark <rosterma@abo.fi> wrote :

>Hi,
>
>I would like to invoke an R-function from a program written in ANSI C.

This is really more involved than you think. Your program needs to initialize the R environment, and be prepared to handle all sorts of things (e.g. what if the R code wants to print something?)

The example you give won't work. Section 4.7 of the 2.0.1 manual is about C functions that are called from R. Writing your own R front-end is described in chapter 7 of that manual.

>Assume that I have written an R script "myRexample" and I want to invoke
>it from C. I assume that my R script loads its data from a datafile so
>no arguments need to be passed between my C program and R. Following
>R-exts.pdf (section 4.7), I write the following main:
>
>#include "my.h" /* includes all standard
>h-files */
>#include <R.h> /* according to R-exts.pdf */
>#include <Rinternals.h>
>SEXP myRexample();
>int main(int argc,char **argv) {
>.External("myRexample"); /* invoking my R script */

.External is an R function to call external code; it's not a C function to call R code.

>exit(0);
>} /* end of main() */
>
>Is this a correct interpretation, given that R is properly installed in
>the (unix) main frame?
>I'm grateful for any advice on how to proceed.

My advice would be to write your C code to be called from R; it's much easier.

Duncan Murdoch



R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Sun Feb 27 08:24:12 2005

This archive was generated by hypermail 2.1.8 : Sun 27 Feb 2005 - 08:33:16 EST