Используйте 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);
}
}
}