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

本文关键字:脚本 执行 NET 通过 | 更新日期: 2023-09-27 18:28:33

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

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

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

R.NET可能会阻塞脚本中某个特定的R语句。如果你有visualstudio,如果你使用从源代码编译的带有调试符号的R.NET,你应该可以连接到进程。如果你有Visual Studio,这是最简单的选择;MonoDevelop/Xamarin工作室也是一个选择,尽管有更多的参与。这将有助于您识别麻烦的线路。

希望这能帮助