使用R(D)COM将R与C#进行集成

时间:2011-02-22 09:45:41

标签: c# r

我正在尝试使用R(D)Com接口。我在机器上安装了R 2.12.1。为了在C#中使用这个接口,我加载了rscproxy_1.3-1包,然后在我的机器上安装了R_Scilab_DCOM3.0-1B5。另外,我将sciproxy.dll从Program Files \ R(D)COM Server \ Scilab复制到Program Files \ R(D)COM Server \ bin,并在安装界面时得到通知。

我的问题:

作为测试的一部分,我尝试了博客文章http://vvella.blogspot.com/2010/08/integrate-c-net-and-r-taking-best-of.html中的代码。但是由于语句rconn.Init(“R”)引发的异常,我的表单应用程序失败了。异常文本是来自HRESULT的异常:0x80040013我试图从Programs-> R-> R(D)COM Server-> Server 01 Basic Test运行样本。在启动的表单上,我单击按钮“启动R”但它失败并在文本框中打印错误为“正在初始化R ...函数调用失败代码:-2147221485文本:安装问题:无法加载连接器”

我试过这个:

我尝试在Index html页面的帮助下对其进行故障排除,在安装部分下,我发现在安装的R / Bin文件夹下必须有rproxy.dll。此外,HKEY_LOCAL_MACHINE \ Software \ R-core \ R \ InstallPath应指向安装文件夹。

我的机器上缺少的东西是

  • 安装的R / bin文件夹没有 包含rproxy.dll。我在哪里可以得到 这个DLL?或者是sciproxy.dll 代替?
  • HKEY_LOCAL_MACHINE \ SOFTWARE \ R-芯\ r \安装路径 指向安装文件夹,但是 没有条目 HKEY_CURRENT_USER \软件。

我猜可能有些关于安装或注册COM服务器的问题。但我没有成功搞清楚。

你能告诉我我哪里出错吗?

谢谢,

卡皮尔西

2 个答案:

答案 0 :(得分:4)

天哪,我记得这对屁股来说是一个巨大的痛苦。让我们看看我是否能记住......在我开始之前,我警告你,我只是“让这个工作”,如果我可以从过程中删除零件,就不会好意思。

可从http://rcom.univie.ac.at/download.html下载。如果我没记错的话,RandFriends软件包就是您所需要的,它会安装一个crapload(只需安装它)但很简单。或者,我认为如果您在R中安装'rscproxy'软件包,您只需下载'statconnDCOM'并安装即可。内存是模糊的,但我知道每次运行C#可执行文件时,其中一种方法会导致恼人的启动画面,而其中一种则不然。虽然这可能只是我玩过的一些设置。

现在,我不记得你是如何验证安装成功的。很确定它附带了一些例子。一旦启动,就打开你的C#项目。参考以下项目,

StatConnectorCommonLib
STATCONNECTORSRVLib

在您的代码中,您可能希望实现IStatConnectorCharacterDevice,以便在C#中返回R输出。您的初始化代码将类似于

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);
}

然后你应该可以根据需要使用这些功能

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

希望有所帮助。

tl;博士下载RAndFriends,用它做全新安装

答案 1 :(得分:0)

我有一个类似的问题,调用R.Init(),我发现R.GetErrorText()返回实际的错误信息