C # - интерфейс R - PullRequest
       1

C # - интерфейс R

21 голосов
/ 21 марта 2011

Мне нужно интерфейс R для некоторых приложений C #. Я установил rscproxy_1.3 и R_Scilab_DCOM3.0-1B5 добавил COM-ссылки на STATCONNECTORCLNTLib, StatConnectorCommonLib и STATCONNECTORSRVLib, но все еще не могу заставить его работать.

Когда я запускаю следующую тестовую программу:

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)

Заранее спасибо.

UPDATE: Хорошо, все еще не повезло. Я постараюсь объяснить, что я сделал до сих пор.

Установлен 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 info. Кроме того, я не мог найти ничего R, связанного в реестре.

Полагаю, я делаю что-то ужасно неправильное, поэтому мне отчаянно нужна ваша помощь, ребята.

Ответы [ 6 ]

15 голосов
/ 22 марта 2011

Вы можете взглянуть на R.NET , для другого подхода ...

11 голосов
/ 22 марта 2011

Хорошо, я наконец решил это.Проблема в том, что R (D) Com не работает с текущей версией R. Я установил 2.11.1, и она работала «из коробки».

Большое спасибо.

9 голосов
/ 06 января 2013

Используйте 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" и "All CPU" (в "Build..Configuration Manager" в 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);
        }
    }
}
4 голосов
/ 21 марта 2011

С здесь :

Мне кажется, я только что вспомнил, как решить исключение 80040013.Я думаю, что это было связано с тем, что моя установка файлов R не включала rscproxy.dll.Где-то по пути R изменился с использования dll с именем (я думаю) proxy.dll и начал использовать один с именем rscproxy.dll.Вы должны найти и загрузить rscproxy.dll в папку R \ bin.

Если это не сработает, проверьте переменные среды, чтобы убедиться, что их значения R_HOME и R_USER указывают на папку R \ bin.Убедитесь, что объекты R (D) Com правильно зарегистрированы в Windows.

3 голосов
/ 20 января 2014

Вот как вызывать пользовательскую функцию R из файла Rdata (а не только встроенную функцию R).На самом деле это то, что работает для меня.Чтобы заставить StatConnectorClass работать, мне пришлось открыть свойства для StatConnectorsRVLib и установить для параметра «Внедрить типы взаимодействия» значение 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();
            }

Надеюсь, это поможет!

3 голосов
/ 17 сентября 2013

Проблема:

Загрузка StatConnector Server ... Выполнено Инициализация R ... Вызов функции не удалось Код: -2147221485 Текст: проблема установки: невозможно загрузить Соединитель, освобождающий сервер StatConnector ... Готово

Решение: [Кстати, у меня в компьютере R, RStudio, Revolution R]

1. Установите необходимые программы и пакеты:
Для выполнения экспоненциального сглаживания в Eviews (7.2) необходимы надстройки ExpSmooth.
Для правильной работы надстроек ExpSmooth необходимо установить программу R, а также прогноз пакетов и rscproxy; и statconnDCOM должны быть установлены.

2. Поместите файлы и папки в правильные места БИН и БИБЛИОТЕКИ:
Скопируйте и вставьте файл rscproxy.dll в папки C:\Program Files\R\R-2.15.3\bin и C:\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\library и C:\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: Пуск - statconn - DCOM - «Сервер 01 - Базовый тест».
Нажмите на R.
statconnDCOM работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...