如何从C#代码运行R脚本?

时间:2017-08-02 08:00:55

标签: c# r process

我正在使用MS Visual Studio R Tools,我可以用R语言编写和测试脚本。然后我想从C#代码开始进程(使用Process.Start(startInfo))来执行这个脚本,等到它完成并检查输出。该脚本生成一些统计计算并将结果保存在.csv文件中的硬盘驱动器上。

如何找到R解释器的路径?以下代码是否正确?

从C#代码调用它时,是否可以向R脚本添加命令行参数?

ProcessStartInfo startInfo = new ProcessStartInfo();
r_interpreter_path="???";
startInfo.FileName = r_interpreter_path;
startInfo.Arguments = "\"" + r_script_name + " \"";
//Add command line arguments
startInfo.Arguments += " -sd " + date_start_str + " -ed " + date_end_str;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardError = true;
using (Process process = Process.Start(startInfo))
{
    using (StreamReader reader = process.StandardOutput)
    {
        string result = reader.ReadToEnd();
        Debug.WriteLine(result);
    }
    process.WaitForExit();
    //string errMsg = process.StandardError.ReadToEnd();
    //if (errMsg != "")
    //    return false;
    GC.Collect();
}

1 个答案:

答案 0 :(得分:2)

有多个R可执行文件。要以批处理模式运行R脚本,您需要使用Rscript.exe。它位于R安装目录的bin/子文件夹中。

第一个参数是要执行的.R文件,可以提供其他参数。通过调用commandArgs()函数,您的R-Script可以使用所有参数。

请注意,存在R.NET,也可以作为NuGet-package使用。该库允许您直接与C#中的R intepreter进行交互。您也可以直接交换数据。