通过R.NET执行本地R脚本

时间:2013-08-20 21:42:44

标签: c# r

我希望使用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文件没有出现。

1 个答案:

答案 0 :(得分:2)

如回复this post in the R.NET discussions所示,您可以使用engine.Evaluate(@"source('c:/path/to/r-test.R')")。虽然很大程度上取决于脚本的内容,但它应该有效。虽然我没有尝试过你的方法,但是你的代码看起来应该也能正常工作。

R.NET可能会阻塞脚本中某些特定的R语句。如果你有visual studio,如果你使用从源代码编译的R.NET和调试符号,你应该可以附加到进程。如果你有Visual Studio,这是最简单的选择; MonoDevelop / Xamarin工作室也是一个选项,虽然有点参与。这应该可以帮助您识别麻烦的界限。

希望这有帮助