通过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讨论中对此帖子的回应所示,您可以使用engine.Evaluate(@"source('c:/path/to/r-test.R')")
。当然,虽然这在很大程度上取决于脚本的内容,但它应该有效。也就是说,虽然我还没有尝试过你的方法,但你的代码看起来应该也能工作。
R.NET可能会阻塞脚本中某个特定的R语句。如果你有visualstudio,如果你使用从源代码编译的带有调试符号的R.NET,你应该可以连接到进程。如果你有Visual Studio,这是最简单的选择;MonoDevelop/Xamarin工作室也是一个选择,尽管有更多的参与。这将有助于您识别麻烦的线路。
希望这能帮助