[R] Calling R from C - part way there but need a push!

From: Maximillian Murphy <m_at_de-minimis.co.uk>
Date: Tue, 29 Apr 2008 17:19:11 +0100

Dear All,

I've read the manual on "Writing R Extensions" and in particular the part on calling R from C. (Most of the manual is about calling C from R, not the other way around.)

The good news is that I can now call _some_ R from C, specifically the R functions which have C header files. However it isn't clear to me how to call R functions that are written in R. I imagine that there is a standard C function of the form

Call_r_from_C("package name", "Rfunction name as a string", arg1, arg2, ...);

where arg1 etc are standardised ways of representing R data structures in C. However I haven't been able to find such a function prototype in the R include/*.h files. See footnote (1). Can you point me in the right direction please? Is there a set of examples somewhere that I can peruse?

Does R keep any state when being called from C? Should I think of it as being a co-process, so I can make consecutive calls to it and expect it to remember previous calls? I'm thinking of a sequence of calls such as "load library", "load R code from a file of my own", "set value of x", "make a call and read the values back into my C program"?

Help is much appreciated.

Regards, Max

(1) The most likely include file is Rinterface.h and within that the
most likely candidates seem to be:
extern int (*ptr_R_ReadConsole)(const char *, unsigned char *, int, int);
extern void (*ptr_R_WriteConsole)(const char *, int); extern void (*ptr_R_WriteConsoleEx)(const char *, int, int);

but it turns out that they assume that R is running the terminal and these are requests to R to display or read from R's console. R isn't acting as the back end being given work and returning answers.

(2) Googling "calling r from c" yields precisely five hits, most of
which just point back at the R extensions document with vague "It's in there somewhere"'s. I've looked!

(3) Leads suggested by help.search("C")

      Foreign Function Interface Functions to make calls to compiled code that has been loaded into R.

.Internal(base)         Call an Internal Function
      '.Internal' performs a call to an internal code which is built in
      to the R interpreter.

      Only true R wizards should even consider using this function, and
      only R developers can add to the list of internal functions.

      (Definitely not me!)

.Primitive(base)        Call a "Primitive" Internal Function

      The advantage of '.Primitive' over '.Internal' functions is the
      potential efficiency of argument passing.

(4) R code that I have called successfully is that with prototypes
defined in e.g. include/R_ext/Applic.h

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 Tue 29 Apr 2008 - 18:16:45 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 Wed 30 Apr 2008 - 15:30:32 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