[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(base):

      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