2016-07-14 3 views
0

Я пытаюсь выполнить простую функцию, написанную на R, используя C# (Installed R.NET) в соответствии сКак выполнить функцию R из C#?

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

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     {   

      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")) 
      { 
       // Initializes settings. 
       engine.Initialize(); 


       var myAddFunc = engine.Evaluate(@"addFunc <- function(a,b) { 
                   a+b 
                }").AsFunction(); 

       var sum = engine.Evaluate("@d <- myAddFunc(10,20))").AsNumeric(); 

       engine.Evaluate("print(sum)");     

       Console.ReadKey(); 
      } 
     } 
    } 
} 

Но получить ошибки в

вара суммы = engine.Evaluate ("@ д < - myAddFunc (10,20)) "). AsNumeric();

Необработанное исключение типа «System.ArgumentNullException» произошло в RDotNet.dll Дополнительная информация: Значение не может быть пустым.

enter image description here

Что такое ошибка, что я делаю?

Запуск программы в R-Console работает отлично

> addFunc <- function(a,b) { 
+ a+b 
+ } 
> d<- addFunc(30,40) 
> print(d) 
[1] 70 

ответ

0

опечатку здесь? @ должен находиться вне строки. Также он не должен быть закрыт двумя скобками.

"@d <- myAddFunc(10,20))" 

должен быть

@"d <- myAddFunc(10,20)" 
+0

Даже после того, как делать уаг сумму = engine.Evaluate (@ "d <- myAddFunc (10,20)) "). AsNumeric() ;, та же самая проблема сохраняется –

+0

ah еще одна опечатка, myAddFunc (10,20) не следует закрывать двумя закрытыми парантезами – kurakura88

+0

ОК, поэтому после того, как я сделал var sum = engine.Evaluate (@ "d <- myAddFunc (10,20)"). AsNumeric(); теперь я получил новое исключение Необработанное исключение типа «RDotNet.ParseException» произошло в RDotNet.dll Дополнительная информация: Ошибка в приложении. –

0

Я знаю, что я опоздал на более чем 2-х лет для этого, ты установил ее? В любом случае, попробуйте это

using (REngine engine = REngine.CreateInstance("RDotNet")) 
       { 
        // Initializes settings. 
        engine.Initialize(); 


        var myAddFunc = engine.Evaluate(@"addFunc <- function(a,b) { 
                 a+b 
                 }").AsFunction(); 

        var sum = engine.Evaluate(@"addFunc(12,30)").AsNumeric(); 

        engine.Evaluate("print(sum)"); 
        Console.Write(sum[0].ToString()); 
        Console.ReadKey(); 
       } 

вам нужно использовать addFunc вместо myAddFunc на втором Оценивать заявление (т.е.

var sum = engine.Evaluate(@"addFunc(12,30)").AsNumeric(); 

)

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