【问题标题】:C# not connecting to R using RDotNetC# 未使用 RDotNet 连接到 R
【发布时间】:2014-11-28 14:29:48
【问题描述】:

我正在尝试使用 RDotNet 将 C# 连接到 R。

以下代码是希望 R 计算两个数字的和,C# 将结果返回并显示在命令窗口中。

using System;
using RDotNet;

namespace rcon
{
class Program
{
    static void Main(string[] args)
    {
        string dllPath = @"C:\Program Files\R\R-3.1.0\bin\i386";

        REngine.SetDllDirectory(dllPath);
        REngine.CreateInstance("RDotNet");

        //REngine engine = REngine.GetInstanceFromID("RDotNet");

        using (REngine engine = REngine.GetInstanceFromID("RDotNet"))
        {
            var x = engine.Evaluate("x <- 1 + 2");
            Console.WriteLine(x);
        }
    }
}
}

但是当我尝试将命令发送到 R 并取回 x 中的值时,我收到了一个错误:

“InvalidOperationException 未处理”

“由于对象的当前状态,操作无效。”

如果我探索对象“引擎”,我会看到 IsRunning=false

这可能是问题吗?我该如何解决这个问题才能与 R 接口?

【问题讨论】:

  • are you missing a "\" 在这个string dllPath = @"C:\Program Files\R\R-3.1.0\bin\i386"的末尾

标签: c# r interface com r.net


【解决方案1】:

您的 R.NET 版本似乎已过时。

来自R.NET project documentation

R.NET 1.5.10 及后续版本包含重大更改 尤其是为了减轻用户经常遇到的两个绊脚石: R 共享库的路径,并防止多个引擎 初始化。

您可以使用 Visual Studio 中的 NuGet 管理器更新您的 R.NET。有关详细信息,请参阅相同的文档页面。

这是来自同一文档页面的代码示例 - 请注意,REngine 的初始化现在明显简单(因为现在 Rengine 查看 R 安装程序设置的注册表设置):

REngine.SetEnvironmentVariables(); // <-- May be omitted; the next line would call it.
REngine engine = REngine.GetInstance();
// A somewhat contrived but customary Hello World:
CharacterVector charVec = engine.CreateCharacterVector(new[] { "Hello, R world!, .NET speaking" });
engine.SetSymbol("greetings", charVec);
engine.Evaluate("str(greetings)"); // print out in the console
string[] a = engine.Evaluate("'Hi there .NET, from the R engine'").AsCharacter().ToArray();
Console.WriteLine("R answered: '{0}'", a[0]);
Console.WriteLine("Press any key to exit the program");
Console.ReadKey();
engine.Dispose();

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2015-08-13
    • 2019-08-28
    相关资源
    最近更新 更多