On Nov 10, 2011, at 6:24 PM, KR wrote: > First of all thanks a lot to you both for all the replies, they have been of > great help to me! > > I got the basic embedding running, however I still have some issues to solve > in > order to complete the interface to R I am working on: > > 1. I initialize with Rf_initEmbeddR(). > - Is there a way to have more than one R "state" (per single thread)? Or is > everything necessarily global?
There are no threads in R. You have only one, global instance of R. > - I also read somewhere that the fpu settings may be touched. Is there a way > to > make sure that this is not the case? Is this related to fpu_setup()? > All following answers assume that you're not running REPL. If you did, you would get all the errors on the console callback, so I'm assuming that's not what you want. > 2. I create a string and parse it via Rf_mkString() and R_parseVector() (yes > I > protect/un-protect the SEXPs). > - Is it possible to obtain the precise error message, like "unexpected symbol > in..." (as would be reported by R.exe) in case of error as a const char* > string? AFAIR you have to evaluate parse(text=...) for that, there is no C-level access to parser errors. > - If I pass a wrongly escaped string (for instance 'ggsave("C:\gtest.png")', > please notice the missing \) I get on stderr: Error '\g' is an unrecognized > escape and I get a crash. This does not happen if for instance i try to parse > 'rnorm(10a10)' in which case I get the error flag and the NULL ptr return. I > suspect I need to initialize something / set a callback to avoid this but I > am > not sure... > If you get a crash, you're not setting up you R correctly. If your R quits then you are in non-interactive mode and you didn't setup an error handler. > 3. I eval with R_tryEvalSilent(). > - Again, is it possible to obtain the precise error message in case of > evaluation error as would be reported from R.exe? > I prefer using Rf_eval() and try(..., silent=TRUE) - you can check on the class of the result to see if there was an error. > 4. Regarding the returned result of evaluation. > - What is the correct way to obtain a const char* string representing the > result > as would be "printed" in the R shell by executing a command (for instance > "summary(c(1,2,3))") ? See ?capture.output > - Why is the return type (as reported from typeof in R and TYPEOF in C) of > "summary(c(1,2,3))" a double? > Because the constants 1, 2 and 3 are all doubles. For example 1L is an integer and "1" is a string. BTW: you are asking a lot of questions the are answered in the Rserve FAQ (since what you do is exactly what Rserve provides) so you may want to have a quick look: http://rforge.net/Rserve/faq.html Cheers, Simon > Any help / feedback on these issues would be greatly appreciated. > > Thanks again. > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel