Hello. I'm using 1.5.15 version of R.NET.
I have an error when running this code:
```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RNetClientServer;
using RDotNet;
namespace R_Server
{
class RServerConsoleApp
{
static void Main(string[] args)
{
Console.WriteLine("Input port number");
var portNumber = int.Parse(Console.ReadLine());
var server = new RNetTCPIPServer(portNumber);
Console.WriteLine("Press any key for closing.");
Console.ReadLine();
server.Stop();
}
}
}
```
```
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Threading;
using RDotNet;
using RDotNet.NativeLibrary;
using RDotNet.Dynamic;
using RDotNet.Devices;
using Hik.Communication.Scs.Communication.EndPoints.Tcp;
using Hik.Communication.Scs.Communication.Messages;
using Hik.Communication.Scs.Server;
namespace RNetClientServer
{
class RNetTCPIPServer
{
private SemaphoreSlim augmentedRNetLocker = new SemaphoreSlim(1, 1);
private REngine engine;
private string envPath = Environment.GetEnvironmentVariable("PATH");
private string rBinPath = @"C:\Program Files\R\R-3.1.0\bin\x64";
private IScsServer tcpServer;
private void ReceiveClientMessage(object sender, MessageEventArgs e)
{
try
{
augmentedRNetLocker.Wait();
var receivedData = (ScsTextMessage)e.Message;
var receivedMessage = receivedData.Text;
var tcpClient = (IScsServerClient)sender;
List<string> receivedCommands = receivedMessage.Split('#').ToList(); //разбор основного сообщения на строки команд.
foreach (var command in receivedCommands)
{
var dataList = command.Split('?').ToList();
string vectorName;
switch (dataList[0])
{
case "SetVector":
vectorName = dataList[1];
var vectorData = dataList[2].Split('|').Select(s => { return double.Parse(s.Replace('.', ',')); }).ToList();
NumericVector RVector = engine.CreateNumericVector(vectorData);
engine.SetSymbol(vectorName, RVector);
break;
case "Evaluate":
engine.Evaluate(dataList[1]);
break;
case "GetVector":
vectorName = dataList[1];
var resultToSend = string.Join("|", engine.GetSymbol(vectorName).AsNumeric().Select(x => { return (x.ToString()).Replace(',', '.'); }));
tcpClient.SendMessage(new ScsTextMessage(resultToSend));
break;
}
}
}
finally
{
augmentedRNetLocker.Release();
}
}
public RNetTCPIPServer(int port)
{
//Environment.SetEnvironmentVariable("PATH", envPath + Path.PathSeparator + rBinPath);
//REngine.SetEnvironmentVariables(rBinPath);
engine = REngine.GetInstance("RDotNet");
#region R Initialize
engine.Initialize();
engine.Evaluate(@"C:\Program Files\R\R-3.1.0\library");
engine.Evaluate("library(signal)");
engine.Evaluate("library(dlm)");
engine.Evaluate("library(circular)");
engine.Evaluate("library(fume)");
engine.Evaluate("library(stats)");
engine.Evaluate("library(MASS)");
engine.Evaluate("library(nlme)");
engine.Evaluate("library(astsa)");
engine.Evaluate("library(wmtsa)");
engine.Evaluate("library(doParallel)");
engine.Evaluate("library(jointSeg)");
engine.Evaluate("library(circular)");
engine.Evaluate("library(lawstat)");
#endregion
tcpServer = ScsServerFactory.CreateServer(new ScsTcpEndPoint("127.0.0.1", port));
tcpServer.ClientConnected += ((object sender, ServerClientEventArgs e) =>
{
e.Client.MessageReceived += ReceiveClientMessage;
});
tcpServer.ClientDisconnected += ((object sender, ServerClientEventArgs e) =>
{
tcpServer.Clients.Remove(e.Client.ClientId);
});
tcpServer.Start();
}
public void Stop()
{
tcpServer.Stop();
}
~RNetTCPIPServer()
{
tcpServer.Clients.ClearAll();
}
}
}
```
(It's my simple realization of client-server mechanism of communication with R server). So, I have ArgumentNullException here:
```
engine = REngine.GetInstance("RDotNet");
engine.Initialize();
```
What do me wrong? All paths for R are correct, PATH environment setted correctly too.
I have an error when running this code:
```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RNetClientServer;
using RDotNet;
namespace R_Server
{
class RServerConsoleApp
{
static void Main(string[] args)
{
Console.WriteLine("Input port number");
var portNumber = int.Parse(Console.ReadLine());
var server = new RNetTCPIPServer(portNumber);
Console.WriteLine("Press any key for closing.");
Console.ReadLine();
server.Stop();
}
}
}
```
```
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Threading;
using RDotNet;
using RDotNet.NativeLibrary;
using RDotNet.Dynamic;
using RDotNet.Devices;
using Hik.Communication.Scs.Communication.EndPoints.Tcp;
using Hik.Communication.Scs.Communication.Messages;
using Hik.Communication.Scs.Server;
namespace RNetClientServer
{
class RNetTCPIPServer
{
private SemaphoreSlim augmentedRNetLocker = new SemaphoreSlim(1, 1);
private REngine engine;
private string envPath = Environment.GetEnvironmentVariable("PATH");
private string rBinPath = @"C:\Program Files\R\R-3.1.0\bin\x64";
private IScsServer tcpServer;
private void ReceiveClientMessage(object sender, MessageEventArgs e)
{
try
{
augmentedRNetLocker.Wait();
var receivedData = (ScsTextMessage)e.Message;
var receivedMessage = receivedData.Text;
var tcpClient = (IScsServerClient)sender;
List<string> receivedCommands = receivedMessage.Split('#').ToList(); //разбор основного сообщения на строки команд.
foreach (var command in receivedCommands)
{
var dataList = command.Split('?').ToList();
string vectorName;
switch (dataList[0])
{
case "SetVector":
vectorName = dataList[1];
var vectorData = dataList[2].Split('|').Select(s => { return double.Parse(s.Replace('.', ',')); }).ToList();
NumericVector RVector = engine.CreateNumericVector(vectorData);
engine.SetSymbol(vectorName, RVector);
break;
case "Evaluate":
engine.Evaluate(dataList[1]);
break;
case "GetVector":
vectorName = dataList[1];
var resultToSend = string.Join("|", engine.GetSymbol(vectorName).AsNumeric().Select(x => { return (x.ToString()).Replace(',', '.'); }));
tcpClient.SendMessage(new ScsTextMessage(resultToSend));
break;
}
}
}
finally
{
augmentedRNetLocker.Release();
}
}
public RNetTCPIPServer(int port)
{
//Environment.SetEnvironmentVariable("PATH", envPath + Path.PathSeparator + rBinPath);
//REngine.SetEnvironmentVariables(rBinPath);
engine = REngine.GetInstance("RDotNet");
#region R Initialize
engine.Initialize();
engine.Evaluate(@"C:\Program Files\R\R-3.1.0\library");
engine.Evaluate("library(signal)");
engine.Evaluate("library(dlm)");
engine.Evaluate("library(circular)");
engine.Evaluate("library(fume)");
engine.Evaluate("library(stats)");
engine.Evaluate("library(MASS)");
engine.Evaluate("library(nlme)");
engine.Evaluate("library(astsa)");
engine.Evaluate("library(wmtsa)");
engine.Evaluate("library(doParallel)");
engine.Evaluate("library(jointSeg)");
engine.Evaluate("library(circular)");
engine.Evaluate("library(lawstat)");
#endregion
tcpServer = ScsServerFactory.CreateServer(new ScsTcpEndPoint("127.0.0.1", port));
tcpServer.ClientConnected += ((object sender, ServerClientEventArgs e) =>
{
e.Client.MessageReceived += ReceiveClientMessage;
});
tcpServer.ClientDisconnected += ((object sender, ServerClientEventArgs e) =>
{
tcpServer.Clients.Remove(e.Client.ClientId);
});
tcpServer.Start();
}
public void Stop()
{
tcpServer.Stop();
}
~RNetTCPIPServer()
{
tcpServer.Clients.ClearAll();
}
}
}
```
(It's my simple realization of client-server mechanism of communication with R server). So, I have ArgumentNullException here:
```
engine = REngine.GetInstance("RDotNet");
engine.Initialize();
```
What do me wrong? All paths for R are correct, PATH environment setted correctly too.