Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using R(D)COM for integrating R with C#

Tags:

c#

r

I am trying to use R(D)Com interface. I have R 2.12.1 installed on machine. For using this interface in C#, I loaded rscproxy_1.3-1 package and then installed R_Scilab_DCOM3.0-1B5 on my machine. Also, I copied sciproxy.dll from Program Files\R(D)COM Server\Scilab to Program Files\R(D)COM Server\bin, as informed while installing the interface.

My Problem:

As a part of testing, I tried the code from blog post http://vvella.blogspot.com/2010/08/integrate-c-net-and-r-taking-best-of.html. But my form application failed due to exception raised by statement rconn.Init(“R”). The exception text was Exception from HRESULT: 0x80040013 I tried to run samples from Programs->R->R(D)COM Server->Server 01 Basic Test. On launched form, I clicked button “Start R” but it failed with error printed in text box as “Initializing R...Function call failed Code: -2147221485 Text: installation problem: unable to load connector”

I tried this:

I tried to troubleshoot it with the help of Index html page, and there under installation section, I found that there must be rproxy.dll under installed R/Bin folder. Also, HKEY_LOCAL_MACHINE\Software\R-core\R\InstallPath should point to installation folder.

Things lacking on my machine are

  • the installed R/bin folder doesn’t contain rproxy.dll. Where can I get this dll? Or is it sciproxy.dll instead?
  • HKEY_LOCAL_MACHINE\Software\R-core\R\InstallPath points to installation folder, but there is no entry under HKEY_CURRENT_USER\Software.

I can guess there is something fishy about installation, or registering COM server. But I am not successful in figuring it out.

Could you please tell me where am I going wrong?

thanks,

Kapil

like image 216
Jaqen H'ghar Avatar asked Feb 22 '11 09:02

Jaqen H'ghar


1 Answers

Oh god I remember this being a huge pain in the arse. Lets see if I can remember... And before I start, I warn you that I just "got this working" and never cared to work out if I could remove parts from the process.

Downloads are available from http://rcom.univie.ac.at/download.html . If I remember correctly, the RandFriends package is all you need, it installs a crapload (just install it all) but is simple. Alternatively, I think if you install the 'rscproxy' package in R you can just download the 'statconnDCOM' and install that. Memory is hazy, but I know one of these methods results in an annoying splash screen everytime you run your C# executable, and one doesn't. Although that could have just been some setting I played with.

Now, I can't remember how you verify that stuff has installed successfully. Pretty sure it comes with examples though. Once that is started, get your C# project open. Reference the following projects,

StatConnectorCommonLib
STATCONNECTORSRVLib

In your code, you will probably want to implement a IStatConnectorCharacterDevice so you get the R output coming back out in C#. Your code to initialise will then look something like,

private StatConnector _StatConn;
private IStatConnectorCharacterDevice _CharDevice;

private Whatever()
{
  // declare
  _StatConn = new StatConnectorClass();
  _CharDevice = new MyCharDevice();

  // init R, wire up char device
  _StatConn.Init("R");
  _StatConn.SetCharacterOutputDevice(_CharDevice);
}

Then you should be able to just use the functions as needed

_StatConn.EvaluateNoReturn("x <- 3");
var returnObj = _StatConn.Evalute("1 + 1");

Hope that helps.

tl;dr download RAndFriends, do fresh install with that

like image 72
mike Avatar answered Oct 04 '22 02:10

mike