Mike Sonsini
2011-Jun-16 22:47 UTC
[Rd] Controlling stdin and stdout in an embedded R instance
Hello, I am very new to R but my question is with respect to the C API for working with an embedded R console. I have been able to start and stop an embedded R console from within a C program as well as use the API to execute commands in it. I am seeking a mechanism to individually send native R commands to an embedded console and then consume the output of these commands. Specifically, I cannot send a set of commands to the embedded console and then consume all of the output after the execution completes. I have unsuccessfully attempted to assign values to the ptr_R_ReadConsole and ptr_R_WriteConsole function pointers defined in Rinterface.h but do not know if this is a valid approach. I am working in Ubuntu 10.04 and thus the Windows example at the following address is not applicable. http://cran.r-project.org/doc/manuals/R-exts.html#Calling-R_002edll-directly Does anyone on this list have experience or an example of communicating with an embedded R console using native R commands and consuming the output one command at a time in a "Unix-alike" environment? Thank you, Mike Sonsini
Hello, I'm new in exploring R-internals, and also did not explored embedding R into C. I did some C-extensions for packages so far. Nevertheless I can give you a hint, which might be helpful; the example which you linked to, uses R.dll. DLL means: Dynamic linked library. On Unix and Linux the aequivalent is shared libraries, or also dynamic linked libraries; another term that is used here is "dynamic linking loader", which provides the possibilities to "load" those libraries, which means, make them available in your application. To use a shared library on Unix/Linux you can use the functions dlopen() dlerror() dlsym() dlclose() The manpages will explain you the details. Hope that helps. Ciao, Oliver
Simon Urbanek
2011-Jun-17 14:29 UTC
[Rd] Controlling stdin and stdout in an embedded R instance
Mike, there are many examples of embedding R, one of them is rJava/JRI and you can see how to initialize R with custom callbacks at http://svn.rforge.net/org/trunk/rosuda/JRI/src/Rinit.c Cheers, Simon On Jun 16, 2011, at 6:47 PM, Mike Sonsini wrote:> Hello, > > I am very new to R but my question is with respect to the C API for working with an embedded R console. I have been able to start and stop an embedded R console from within a C program as well as use the API to execute commands in it. I am seeking a mechanism to individually send native R commands to an embedded console and then consume the output of these commands. Specifically, I cannot send a set of commands to the embedded console and then consume all of the output after the execution completes. I have unsuccessfully attempted to assign values to the ptr_R_ReadConsole and ptr_R_WriteConsole function pointers defined in Rinterface.h but do not know if this is a valid approach. I am working in Ubuntu 10.04 and thus the Windows example at the following address is not applicable. > > http://cran.r-project.org/doc/manuals/R-exts.html#Calling-R_002edll-directly > > Does anyone on this list have experience or an example of communicating with an embedded R console using native R commands and consuming the output one command at a time in a "Unix-alike" environment? > > Thank you, > Mike Sonsini > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > >
Dirk Eddelbuettel
2011-Jun-17 14:34 UTC
[Rd] Controlling stdin and stdout in an embedded R instance
On 16 June 2011 at 18:47, Mike Sonsini wrote: | Hello, | | I am very new to R but my question is with respect to the C API for | working with an embedded R console. I have been able to start and stop | an embedded R console from within a C program as well as use the API to | execute commands in it. I am seeking a mechanism to individually send | native R commands to an embedded console and then consume the output of | these commands. Specifically, I cannot send a set of commands to the | embedded console and then consume all of the output after the execution | completes. I have unsuccessfully attempted to assign values to the | ptr_R_ReadConsole and ptr_R_WriteConsole function pointers defined in | Rinterface.h but do not know if this is a valid approach. I am working | in Ubuntu 10.04 and thus the Windows example at the following address is | not applicable. | | http://cran.r-project.org/doc/manuals/R-exts.html#Calling-R_002edll-directly | | Does anyone on this list have experience or an example of communicating | with an embedded R console using native R commands and consuming the | output one command at a time in a "Unix-alike" environment? Let me see if I understood this correctly: - you have managed to embed R in your own application - you now want to control the embedded R instance and for the latter you want to use stdin and stdout? Why not use R commands and consuming R output? Examples are e.g. - littler (available in Ubuntu) which sends R commands line by line to R; implemented in plain C. Commands can come from the command-line, from a script or from stdin: R still sees them line by line in REPL fashion. - RInside which builds on top of the littler experience and the Rcpp API (Rcpp is also in Ubuntu) to embed R via a much nicer C++ abstraction which, coupled with Rcpp, gives you real easy communication via full blown R objects accessible from C++. There are well over a dozen examples in the RInside sources Hope this helps, Dirk -- Gauss once played himself in a zero-sum game and won $50. -- #11 at http://www.gaussfacts.com
Mike Sonsini
2011-Jun-22 13:36 UTC
[Rd] Controlling stdin and stdout in an embedded R instance
Thank you, this example helped. Mike Sonsini On 6/17/2011 10:29 AM, Simon Urbanek wrote:> Mike, > > there are many examples of embedding R, one of them is rJava/JRI and you can see how to initialize R with custom callbacks at > http://svn.rforge.net/org/trunk/rosuda/JRI/src/Rinit.c > > Cheers, > Simon