1

我希望使用 R.NET 来执行现有的 R 脚本,但没有成功。这真的可能吗?我已经成功运行了示例代码,所以我的基本设置没问题。

我的代码如下所示:

  static void RTest()
  {
     var envPath = Environment.GetEnvironmentVariable("PATH");
     var rBinPath = System.Environment.Is64BitProcess ? @"C:\Program Files\R\R-3.0.1\bin\x64" : @"C:\Program Files\R\R-3.0.1\bin\i386";
     Environment.SetEnvironmentVariable("PATH", envPath + Path.PathSeparator + rBinPath);

     using( var engine = REngine.CreateInstance("RDotNet") )
     {
        engine.Initialize();

        using( var fs = File.OpenRead(@"C:\R-scripts\r-test.R") )
        {
           engine.Evaluate(fs);
        }
     }
  }

我在控制台应用程序中运行以进行测试(最终我想让它在 Web 应用程序的服务器端运行)。

r-test.R 脚本在 RStudio 中运行时有效,因此那里没有问题,应该会导致将 csv 文件写入磁盘。我确实看到一些“正在加载所需的包”消息输出到控制台,所以有些东西正在工作,但没有出现生成的 csv 文件。

4

1 回答 1

5

正如在R.NET 讨论中对这篇文章的回应中指出的那样,您可以使用engine.Evaluate(@"source('c:/path/to/r-test.R')"). 当然,虽然很大程度上取决于脚本的内容,但它应该可以工作。那就是说您的代码看起来也应该可以工作,尽管我没有尝试过您的方法。

R.NET 可能会阻塞脚本中的某些特定 R 语句。如果您有 Visual Studio,如果您使用从源代码编译的带有调试符号的 R.NET,您应该可以附加到该过程。如果你有 Visual Studio,这是最简单的选择;MonoDevelop / Xamarin studio 也是一种选择,尽管涉及更多。这应该可以帮助您识别麻烦的线路。

希望这可以帮助

于 2013-09-06T00:53:53.510 回答