我希望使用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文件没有出现。
答案 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工作室也是一个选项,虽然有点参与。这应该可以帮助您识别麻烦的界限。
希望这有帮助