C# – R接口

我需要将R连接到某个C#应用程序。 我安装了rscproxy_1.3R_Scilab_DCOM3.0-1B5添加了对STATCONNECTORCLNTLibStatConnectorCommonLibSTATCONNECTORSRVLib COM引用,但我仍然无法使其工作。

当我运行以下测试程序时:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; //COM references using STATCONNECTORCLNTLib; using StatConnectorCommonLib; using STATCONNECTORSRVLib; namespace R_TESTING { class Program { static void Main(string[] args) { StatConnector sc1 = new STATCONNECTORSRVLib.StatConnectorClass(); sc1.Init("R"); } } } 

我得到这个例外:

 Unhandled Exception: System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x80040013 at STATCONNECTORSRVLib.StatConnectorClass.Init(String bstrConnectorName) 

提前致谢。

更新:好的,仍然没有运气。 我会试着解释一下到目前为止我做了什么。

从rproject安装R-2.12.2-win.exe到C:\Program Files\R\R-2.12.2

下载rscproxy_1.3-1.zip并将其复制/粘贴到C:\Program Files\R\R-2.12.2\library

将R_Scilab_DCOM3.0-1B5.exe安装到C:\Program Files (x86)\R\(D)COM Server

使用Scilab进行基本测试。 我试图运行它,但我得到以下错误:

加载StatConnector服务器…完成初始化R …函数调用失败代码:-2147221485文本:安装问题:无法加载连接器释放StatConnector服务器…完成

比我查看PATH /系统变量,发现没有路径/ R_HOME / R_USER信息。 另外,我在注册表中找不到任何与R相关的内容。

我想我做的事情非常糟糕,所以我迫切需要你们的帮助。

你可以看看R.NET ,另一种方法……

好的,我终于解决了。 问题是R(D)Com不适用于当前版本的R.我安装了2.11.1并且它开箱即用。

非常感谢。

使用R.NET (我从NuGet安装了我的)和以下代码在一个新的C#控制台应用程序中(通过http://rdotnet.codeplex.com/进行了少量更改而复制)。

当它指向32位版本的R v2.11.1时它将起作用,但是当指向64位版本的R v2.11.1时它将不起作用(如下面的代码所示)。

当我安装NuGet时,它会自动添加对当前项目的引用: RDotNet (RDotNet.dll)和RDotNet.NativeLIbrary (RDotNet.NativeLibrary.dll)。 在任何新项目中都需要这些引用。

在VS2012下工作(在VS2010下未经测试,但可能会有效)。

在为“x32”和“所有CPU”编译时工作(在VS2012中的“Build..Configuration Manager”下)。

 // Call R from .NET. Advantage is that everything is in process. // Tested on VS2012, will probably work on VS2010. using System; using System.IO; using System.Linq; using RDotNet; class Program { static void Main(string[] args) { // Set the folder in which R.dll locates. var envPath = Environment.GetEnvironmentVariable("PATH"); var rBinPath = @"C:\Program Files (x86)\R\R-2.11.1\bin"; //var rBinPath = @"C:\Program Files\R\R-2.11.1-x64\bin"; // Doesn't work ("DLL was not found.") Environment.SetEnvironmentVariable("PATH", envPath + Path.PathSeparator + rBinPath); using (REngine engine = REngine.CreateInstance("RDotNet")) { // Initializes settings. engine.Initialize(); // .NET Framework array to R vector. NumericVector group1 = engine.CreateNumericVector(new double[] { 30.02, 29.99, 30.11, 29.97, 30.01, 29.99 }); engine.SetSymbol("group1", group1); // Direct parsing from R script. NumericVector group2 = engine.Evaluate("group2 <- c(29.89, 29.93, 29.72, 29.98, 30.02, 29.98)").AsNumeric(); // Test difference of mean and get the P-value. GenericVector testResult = engine.Evaluate("t.test(group1, group2)").AsList(); double p = testResult["p.value"].AsNumeric().First(); Console.WriteLine("Group1: [{0}]", string.Join(", ", group1)); Console.WriteLine("Group2: [{0}]", string.Join(", ", group2)); Console.WriteLine("P-value = {0:0.000}", p); } } } 

从这里 :

我想我只记得如何解决80040013exception。 我认为这与我安装的R文件不包含rscproxy.dll的事实有关。 在某个地方,R改变了使用名为(我认为)proxy.dll的DLL,并开始使用一个名为rscproxy.dll的DLL。 您必须找到rscproxy.dll并将其下载到R \ bin文件夹。

如果这不起作用,请检查环境变量以确保它们的R_HOME和R_USER值指向R \ bin文件夹。 确保R(D)Com对象已在Windows中正确注册。

以下是如何从Rdata文件(不仅仅是内置的R函数)调用自定义R函数。 实际上这对我有用。 为了使StatConnectorClass工作,我不得不打开StatConnectorsRVLib的属性并将’Embed Interop Types’设置为False。

 using StatConnectorCommonLib; using STATCONNECTORSRVLib; using STATCONNECTORCLNTLib; StatConnectorClass rConn = new StatConnectorClass(); try { rConn.Init("R"); // here is where we initialize R Response.Write("Initialized." + "
"); Response.Flush(); Response.Write("1" + "
"); Response.Flush(); string path = @"C:SOMEPATH\Black-Scholes.RData"; rConn.SetSymbol("path", path); Response.Write("2" + "
"); Response.Flush(); rConn.Evaluate("load(path)"); Response.Write("3" + "
"); Response.Flush(); Int16 entry = 27; rConn.SetSymbol("n1", entry); Response.Write("6" + "
"); Response.Flush(); rConn.Evaluate("x1<-samplefn(n1)" ); Response.Write("Entered : " + entry.ToString() + "
"); Object o = rConn.GetSymbol("x1"); Response.Write("Ans:" + o.ToString() + "
"); Response.Flush(); rConn.Close(); } catch (Exception ex) { Response.Write("Error: " + ex.Message );//+ " xx " + rConn.GetErrorText()); rConn.Close(); }

希望这可以帮助!

问题:

加载StatConnector服务器…完成初始化R …函数调用失败代码:-2147221485文本:安装问题:无法加载连接器释放StatConnector服务器…完成

解决方案: [顺便说一下,我的电脑里有R,RStudio,Revolution R]

1. 安装必要的程序和包:
要在Eviews(7.2)中执行指数平滑,必须使用ExpSmooth插件。
要使ExpSmooth加载项正常工作,必须安装程序R,以及软件包预测和rscproxy; 和statconnDCOM必须安装。

2. 将文件和文件夹放到正确的BIN和LIBRARY位置:
将文件rscproxy.dll复制粘贴到C:\Program Files\R\R-2.15.3\binC:\Revolution\R-Enterprise-6.1\R-2.14.2\bin文件夹。
将rscproxy文件夹放在rscproxy_2.0-5.zip文件中的C:\Revolution\R-Enterprise-6.1\R-2.14.2\libraryC:\Program Files\R\R-2.15.3\library文件夹中。

3. 其他信息:
我没有对环境变量进行任何更改来克服问题。
当我像这样安装R和Revolution R时,我第一次设置了一些环境变量(此设置与上下文无关):
系统变量 – 路径:C:\ Rtools \ bin; C:\ Program Files \ R \ R-3.0.2 \ bin \ i386; C:\ Rtools \ gcc-4.6.3 \ bin;
(我建议你设置你安装和使用的R版本)。
运行Server 01 – Basic Test安装statconnDCOM时存在的Server 01 – Basic Test :开始 – statconn – DCOM – “服务器01 – 基本测试”。
按到R.
statconnDCOM工作。