2013-11-22 4 views
1
static void Main(string[] args) 
{ 
    // Set the folder in which R.dll locates. 
    var envPath = Environment.GetEnvironmentVariable("PATH"); 
    var rBinPath = @"C:\R-3.0.2\bin\i386\"; 
    Environment.SetEnvironmentVariable("PATH", envPath + Path.PathSeparator + rBinPath); 
    using (REngine engine = REngine.CreateInstance("RDotNet")) 
    { 
     // Initializes settings. 
     engine.Initialize(); // After Executing this line its crashing. 

     NumericVector group1 = engine.CreateNumericVector(new double[] { 30.02, 29.99, 30.11, 29.97, 30.01, 29.99 }); 
     engine.SetSymbol("group1", group1); 
     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); 
     Console.ReadLine(); 
    } 

}R Двигатель не инициализируется

Привет Когда я выполнил код выше это сбой во время инициализации. ОС Windows XP sp3 (32 бит) R версию- R-3.0.2 с использованием R.Net (версии 1.5)

Пожалуйста, помогите мне подключиться к R от C#

+0

В какой строке он падает? –

+1

engine.Initialize(); –

+0

Мне нужна помощь в этой проблеме. –

ответ

3

Я думаю, что двигатель сбой, потому что у вас есть некоторая ошибка R-пути. лучше прочитать путь из реестра Windows.

попробовать что-то вроде этого:

using (RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\R-core\R")){ 
    var envPath = Environment.GetEnvironmentVariable("PATH"); 
    string rBinPath = (string)registryKey.GetValue("InstallPath"); 
    string rVersion = (string)registryKey.GetValue("Current Version"); 
    rBinPath = System.Environment.Is64BitProcess ? rBinPath + "\\bin\\x64" : 
                rBinPath + "\\bin\\i386"; 
    Environment.SetEnvironmentVariable("PATH", 
          envPath + Path.PathSeparator + rBinPath); 
} 
using (REngine engine = REngine.CreateInstance("RDotNet")){ 
       // same code here 
} 

Конечно, вы должны объявлениями правильных ссылок:

using Microsoft.Win32; 
using RDotNet; 
using System.IO; 
+0

Есть ли что-нибудь заменить на «ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ R-core \ R» причина, по которой я получаю ERROR Исключено System.NullReferenceException –

+0

Нет ничего. Вы можете проверить регистрацию, запустить cmd -> regedit -> HKEY_LOCAL_MACHINE -> ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ -> R ... Тогда, если вы не найдете какой-либо ключевой записи, вам следует переустановить R и проверить настройку реестра во время установки ... – agstudy

+1

Большое спасибо за помощь. в моем случае путь следующий. RegistryKey registryKey = Registry.CurrentUser.OpenSubKey (@ "software \ R-core \ R"); Но все же его сбой на той же линии инициализации. –

1

Я была такая же проблема. Сбой при вызове engine.Initialize(). Я переустановил R для Windows в качестве администратора и зарегистрировал ключи в реестре. R.NET работает отлично даже в приложении ASP.NET.

Смежные вопросы