使用 R.NET 在 R 和 C# 之间链接

本文关键字:之间 链接 NET 使用 | 更新日期: 2023-09-27 17:56:20

我想使用Visual Studio C# 2012的R软件。我注意到有人对 R.NET 这样做了。我安装了R.2.15.2(我找到的版本)。我注意到 R.NET 只使用 R(32 位)。我已经安装了 32 和 64,但我链接到 32 位。程序找不到 DLL 并抛出 DLL 找不到异常。我注意到 envPath 是空的,找不到变量。我想知道是否有人可以帮助我。

谢谢。

static void Main(string[] args)
{
    string PATH = @"c:'Users'Documents'Visual Studio 2012'Projects'ConsoleApplication1'packages'R.NET.1.5.0'lib'net40";
    // Set the folder in which R.dll locates.
    var envPath = Environment.GetEnvironmentVariable(PATH);
    var rBinPath = @"C:'Program Files'R'R-2.15.2'bin'i386";
    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);
    }
}

使用 R.NET 在 R 和 C# 之间链接

var currentPath = Environment.GetEnvironmentVariable("path");
var pathWithR = string.Join(";", currentPath, rPath1, rPath2, ...);
Environment.SetEnvironmentVariable("path", pathWithR);

MSDN Environment.GetEnvironmentVariable
MSDN Environment.SetEnvironmentVariable