2011-03-21 20 views
20

RをいくつかのC#アプリケーションにインターフェイスする必要があります。私はrscproxy_1.3R_Scilab_DCOM3.0-1B5をインストールしました。STATCONNECTORCLNTLibStatConnectorCommonLibSTATCONNECTORSRVLibへのCOM参照が追加されましたが、まだ動作しません。C# - Rインターフェイス

私は、次のテストプログラムを実行すると:

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) 

感謝を。

更新日: いいえ、まだ運がありません。 私がこれまでにしたことを説明しようとします。

Installed R-2.12.2-win.exe from rproject to the C:\Program Files\R\R-2.12.2

Downloaded rscproxy_1.3-1.zip and copy/pasted it to the C:\Program Files\R\R-2.12.2\library

Installed R_Scilab_DCOM3.0-1B5.exe to the C:\Program Files (x86)\R\(D)COM Server

Scilabでは基本的なテストが行​​われます。私はそれを実行しようとしたが、私はエラー以下だ:

Loading StatConnector Server... Done Initializing R...Function call failed Code: -2147221485 Text: installation problem: unable to load connector Releasing StatConnector Server...Done

私はPATH /システム変数に見て、何のパス/ R_HOME/R_USER情報を見つけていないたより。また、レジストリにR関連のものが見つかりませんでした。

私は何かひどく間違っていると思います。だから、皆さんの助けが切望されています。 hereから

+1

http://stackoverflow.com/questions/12834704/exception-from-hresult-0x80040013-when-intregating-r-with-c – Contango

答えて

11

[OK]を、私は最終的にそれを解決しました。 問題は、R(D)Comが現在のバージョンのRで動作しないことです。私は2.11.1をインストールしました。

ありがとうございます。

+0

R v2.11.1 x64で動作させることができませんでした(おそらく私はx32バージョンをインストールする必要があります)。 – Contango

4

I think I just remembered how to solve the 80040013 exception. I think it had to do with the fact that my install of the R files did not include a rscproxy.dll. Somewhere along the way, R changed from using a dll named (I think) proxy.dll and started using one called rscproxy.dll. You have to find and download rscproxy.dll to the R\bin folder.

If that doesn't work, check your environment variables to be sure they R_HOME and R_USER values are pointing to the R\bin folder. Make sure the R (D)Com objects are properly registered with Windows.

+0

回答ありがとうございますが、まだ何もありません。私はrscproxy.dllをC:\ Program Files \ R \ R-2.12.2 \ bin \ rscproxyに入れましたが、まだ80040013が得られ、環境変数が正しく設定されています。その他の提案はありますか? – Klark

+0

Klark: 'rscproxy'はデフォルトのライブラリの場所(' R_HOME/library/rscproxy')にインストールされていますか?カスタムの 'R_LIBRARY'を使用すると、それが壊れることを覚えているようです。 –

+0

はいそうです。私は私の質問を更新する。見てください。ありがとう – Klark

15

あなたは別のアプローチのために、R.NETを見てすることができます...

+0

私はR.NETをVS2012で動作させ、R 2.11.1 x32で動作させました。これは "x32"と "すべてのCPU"( "構成マネージャ"を参照)用にコンパイルされたときに機能します。これは、R 2.11.1 x64( "DLLが見つかりませんでした")を指しているときには機能しませんでした。 – Contango

+0

R.Net at GitHub:https:// github。com/jmp75/rdotnet – user2341923

8

R.NET(私はNuGetの鉱山をインストールしました)と次のコードを新しいC#コンソールアプリ(http://rdotnet.codeplex.com/から少し変更してコピー)に使用してください。

R v2.11.1の32ビットバージョンでは機能しますが、では、R v2.11.1の64ビットバージョン(以下のコードを参照)を指しているとは機能しません。

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

私はR.NETをR(D)COMのアプローチに優先します。関係するコンポーネントのアーキテクチャターゲットの不一致のために、x64シナリオでは「機能しませんか」? R.NET(1.6)の新しいバージョンでは、C#コードでパスを設定する必要はありません。 R.NET Initializeメソッドはマシン上のR-installを検出します。しかし、MVCアプリケーションのVS2013 NET 4.51とTarget of Any CPUを使用する場合、システムパスを32ビットR C:¥Program Files¥R¥R-3.1.0¥bin¥i386に設定する必要がありました。パスに追加すると、64ビットのR:¥Program Files¥R¥R-3.1.0¥bin¥x64にエラーが発生し、R.dllに関数呼び出しのエラーが発生しました。 – subsci

+0

@subsci全く同じですが、R.NETはR(D)COMよりはるかに優れています。 – Contango

3

問題:

Loading StatConnector Server... Done Initializing R...Function call failed Code: -2147221485 Text: installation problem: unable to load connector Releasing StatConnector Server...Done

ソリューション: [ところで、私は私のPCにはR、RStudio、革命Rを持っている]

1.インストール必要なプログラムとパッケージ:
指数関数的Eviews(7.2)でのスムージング、ExpSmoothアドインが必要です。
ExpSmoothアドインが正常に動作するためには、プログラムRとforecastパッケージとrscproxyパッケージをインストールする必要があります。 statconnDCOMをインストールする必要があります。

2.正しいBINおよびLIBRARY場所にファイルやフォルダを入れる:
C:\Program Files\R\R-2.15.3\binC:\Revolution\R-Enterprise-6.1\R-2.14.2\binのフォルダにファイルrscproxy.dllをコピー&ペーストします。
rscproxy_2.0-5.zipファイルのrscproxyフォルダをC:\Revolution\R-Enterprise-6.1\R-2.14.2\libraryC:\Program Files\R\R-2.15.3\libraryフォルダに置きます。

3.追加情報:
私は質問でこの問題を克服するための環境変数を変更しませんでした。私はRをインストールしたとき
は私が初めていくつかの環境変数を設定していたし、そのような革命R(この設定は、ここでは、文脈とirrelavantです):
システム変数 - パス:​​ C:\ Rtools \ビン; C:\プログラムFiles¥R¥R-3.0.2¥bin¥i386; C:¥Rtools¥gcc-4.6.3¥bin;
(インストールして使用しているRバージョンを設定することを提案します)。
statconnDCOMのインストール時に存在した実行Server 01 – Basic Test:Start - statconn - DCOM - "Server 01 - Basic Test"
を押すとRになります。
statconnDCOM worked。

3

Rの組み込み関数だけでなく、RdataファイルからカスタムR関数を呼び出す方法は次のとおりです。 これは実際に私のために働いたものです。 StatConnectorClassを機能させるには、StatConnectorsRVLibのプロパティを開き、 '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." + "<br />"); Response.Flush(); 
       Response.Write("1" + "<br />"); Response.Flush(); 
       string path = @"C:SOMEPATH\Black-Scholes.RData"; 
       rConn.SetSymbol("path", path); 
       Response.Write("2" + "<br />"); Response.Flush(); 
       rConn.Evaluate("load(path)"); 
       Response.Write("3" + "<br />"); Response.Flush(); 
       Int16 entry = 27; 
       rConn.SetSymbol("n1", entry); 
       Response.Write("6" + "<br />"); Response.Flush(); 
       rConn.Evaluate("x1<-samplefn(n1)"); 
       Response.Write("Entered : " + entry.ToString() + "<br/> "); 
       Object o = rConn.GetSymbol("x1"); 
       Response.Write("Ans:" + o.ToString() + "<br />"); Response.Flush(); 
       rConn.Close(); 
      } 
      catch (Exception ex) 
      { 
       Response.Write("Error: " + ex.Message);//+ " xx " + rConn.GetErrorText()); 
       rConn.Close(); 
      } 

関連する問題