Я пытаюсь выполнить простую функцию, написанную на 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 Дополнительная информация: Значение не может быть пустым.
Что такое ошибка, что я делаю?
Запуск программы в R-Console работает отлично
> addFunc <- function(a,b) {
+ a+b
+ }
> d<- addFunc(30,40)
> print(d)
[1] 70
Даже после того, как делать уаг сумму = engine.Evaluate (@ "d <- myAddFunc (10,20)) "). AsNumeric() ;, та же самая проблема сохраняется –
ah еще одна опечатка, myAddFunc (10,20) не следует закрывать двумя закрытыми парантезами – kurakura88
ОК, поэтому после того, как я сделал var sum = engine.Evaluate (@ "d <- myAddFunc (10,20)"). AsNumeric(); теперь я получил новое исключение Необработанное исключение типа «RDotNet.ParseException» произошло в RDotNet.dll Дополнительная информация: Ошибка в приложении. –