【问题标题】:Using R(D)COM for integrating R with C#使用 R(D)COM 将 R 与 C# 集成
【发布时间】:2011-02-22 09:45:41
【问题描述】:

我正在尝试使用 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 运行示例。在启动的表单上,我单击了“Start R”按钮,但它失败并在文本框中打印为“Initializing R...Function call failed Code: -2147221485 Text: installation problem: unable to load connector”

我试过这个:

我尝试在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-core\R\InstallPath 指向安装文件夹,但是 下没有条目 HKEY_CURRENT_USER\软件。

我猜想安装或注册 COM 服务器有些问题。但我没有成功地弄清楚。

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

谢谢,

卡皮尔

【问题讨论】:

  • 从比表单更简单的东西开始 - 尝试使用控制台应用程序,然后将 mrnye 的代码放入 Main
  • 另外,我记得旧版本中存在一个错误,这意味着 rcom 必须安装在默认库位置 (R.home("library")) 或找不到连接。不知道这是否已经修复。
  • 嗨卡皮尔,如果你得到了这个问题的解决方案,请回复解决方案。提前致谢

标签: c# r


【解决方案1】:

天哪,我记得这是一个巨大的痛苦。让我看看我是否还记得……在开始之前,我警告你,我只是“开始工作”,从不关心是否可以从流程中删除部分。

可从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;dr 下载 RAndFriends,使用它进行全新安装

【讨论】:

  • 感谢@mrnye 的回答。 RAndFriend 包对我来说工作得很好。在没有任何代理设置的情况下下载这个包。
【解决方案2】:

我在调用 R.Init() 时遇到了类似的问题,我发现 R.GetErrorText() 返回了实际的错误消息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2020-04-13
    • 1970-01-01
    相关资源
    最近更新 更多