C # – interfaz R

Necesito conectar R a alguna aplicación C #. Instalé rscproxy_1.3 y R_Scilab_DCOM3.0-1B5 agregué referencias COM a STATCONNECTORCLNTLib , StatConnectorCommonLib y STATCONNECTORSRVLib pero todavía no puedo hacer que funcione.

Cuando ejecuto el siguiente progtwig de prueba:

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

Obtengo esta excepción:

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

Gracias por adelantado.

ACTUALIZACIÓN: Ok, todavía no hay suerte. Trataré de explicar lo que hice hasta ahora.

Se instaló R-2.12.2-win.exe desde rproject hasta C:\Program Files\R\R-2.12.2

Descargó rscproxy_1.3-1.zip y lo copió / pegó en la C:\Program Files\R\R-2.12.2\library

Se instaló R_Scilab_DCOM3.0-1B5.exe en el C:\Program Files (x86)\R\(D)COM Server

Con Scilab viene una prueba básica. Intenté ejecutarlo, pero obtuve el siguiente error:

Cargando StatConnector Server … Hecho Inicializando R … Fallo de llamada a la función Código: -2147221485 Texto: problema de instalación: no se puede cargar el conector Liberación del servidor StatConnector … Hecho

Luego miré en el PATH / Variables del sistema y no encontré ninguna ruta / información de R_HOME / R_USER. Además, no pude encontrar nada relacionado con R en el registro.

Creo que estoy haciendo algo terriblemente mal, así que necesito desesperadamente ayuda de ustedes.

Puedes echarle un vistazo a R.NET , por otro enfoque …

Ok, lo resolví finalmente. El problema es que R (D) Com no funciona con la versión actual de R. Instalé 2.11.1 y funcionó fuera de la caja.

Muchas gracias.

Use R.NET (instalé el mío de NuGet) y el siguiente código en una nueva aplicación de consola C # (que se copió con cambios menores de http://rdotnet.codeplex.com/ ).

Funcionará cuando se apunte a la versión de 32 bits de R v2.11.1, pero no funcionará cuando se apunte a la versión de 64 bits de R v2.11.1 (como se indica en el código a continuación).

Cuando instalé NuGet, automáticamente agregó referencias al proyecto actual: RDotNet (RDotNet.dll) y RDotNet.NativeLIbrary (RDotNet.NativeLibrary.dll). Necesitará estas referencias en cualquier proyecto nuevo.

Funciona bajo VS2012 (no probado bajo VS2010, pero probablemente funcionará).

Funciona cuando se comstack para “x32” y “Toda la CPU” (en “Build..Configuration Manager” en VS2012).

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

Desde aquí :

Creo que acabo de recordar cómo resolver la excepción 80040013. Creo que tenía que ver con el hecho de que mi instalación de los archivos R no incluía un rscproxy.dll. En algún momento, R cambió de utilizar un dll llamado (creo) proxy.dll y comenzó a usar uno llamado rscproxy.dll. Debe encontrar y descargar rscproxy.dll en la carpeta R \ bin.

Si eso no funciona, verifique las variables de entorno para asegurarse de que los valores R_HOME y R_USER apuntan a la carpeta R \ bin. Asegúrese de que los objetos R (D) Com estén registrados correctamente en Windows.

A continuación, se indica cómo llamar una función R personalizada desde un archivo Rdata (no solo una función R incorporada). En realidad, esto es lo que funcionó para mí. Para que funcione StatConnectorClass, tuve que abrir las propiedades de StatConnectorsRVLib y establecer ‘Incrustar tipos de interoperabilidad’ en 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(); }

¡Espero que esto ayude!

Problema:

Cargando StatConnector Server … Hecho Inicializando R … Fallo de llamada a la función Código: -2147221485 Texto: problema de instalación: no se puede cargar el conector Liberación del servidor StatConnector … Hecho

Solución: [Por cierto, tengo R, RStudio, Revolution R en mi PC]

1. Instale los progtwigs y paquetes necesarios:
Para realizar un suavizado exponencial en Eviews (7.2), se necesitan complementos ExpSmooth.
Para que los complementos ExpSmooth funcionen correctamente, el progtwig R y los paquetes previstos y rscproxy deben estar instalados; y statconnDCOM debe estar instalado.

2. Coloque los archivos y las carpetas en las ubicaciones correctas de BIN y BIBLIOTECA:
Copie y pegue el archivo rscproxy.dll en las carpetas C:\Program Files\R\R-2.15.3\bin y C:\Revolution\R-Enterprise-6.1\R-2.14.2\bin .
Coloque la carpeta rscproxy en el archivo rscproxy_2.0-5.zip en la carpeta C:\Revolution\R-Enterprise-6.1\R-2.14.2\library y C:\Program Files\R\R-2.15.3\library .

3. Información adicional:
No hice ningún cambio en las variables de entorno para superar el problema en cuestión.
Había establecido algunas variables de entorno por primera vez cuando instalé R y Revolution R así (esta configuración es irrelavante con el contexto aquí):
Variables del sistema – Ruta: C: \ Rtools \ bin; C: \ Archivos de progtwig \ R \ R-3.0.2 \ bin \ i386; C: \ Rtools \ gcc-4.6.3 \ bin;
(Te ofrezco configurar la versión R que instalaste y usaste).
Run Server 01 – Basic Test que existía al instalar statconnDCOM: Start – statconn – DCOM – “Server 01 – Basic Test”.
Presione a R.
statconnDCOM funcionó.