/// ********************************************************************************************************* /// © 2014 www.jakemdrew.com All rights reserved. /// This source code is licensed under The GNU General Public License (GPLv3): /// http://opensource.org/licenses/gpl-3.0.html /// ********************************************************************************************************* /// ********************************************************************************************************* /// RScriptRunner - Run R Programs From C#. /// Created By - Jake Drew /// Version - 1.0, 06/23/2014 /// ********************************************************************************************************* /// This class runs R code from a file using the console. /// /// If this code fails, it will typically fail "silently" without /// the R code running and without an error message. This is normally /// due to an incorrect argument for the rScriptExecutablePath variable. /// public class RScriptRunner { /// Runs an R script from a file using Rscript.exe. /// /// Example: /// /// RScriptRunner.RunFromCmd(curDirectory + @"\ImageClustering.r", "rscript.exe", curDirectory.Replace('\\','/')); /// /// Getting args passed from C# using R: /// /// args = commandArgs(trailingOnly = TRUE) /// print(args[1]); /// /// rCodeFilePath - File where your R code is located. /// rScriptExecutablePath - Usually only requires "rscript.exe" /// args - Multiple R args can be seperated by spaces. /// Returns - a string with the R responses. public static string RunFromCmd(string rCodeFilePath, string rScriptExecutablePath, string args) { string file = rCodeFilePath; string result = string.Empty; try { var info = new ProcessStartInfo(); info.FileName = rScriptExecutablePath; info.WorkingDirectory = Path.GetDirectoryName(rScriptExecutablePath); info.Arguments = rCodeFilePath + " " + args; info.RedirectStandardInput = false; info.RedirectStandardOutput = true; info.UseShellExecute = false; info.CreateNoWindow = true; using (var proc = new Process()) { proc.StartInfo = info; proc.Start(); result = proc.StandardOutput.ReadToEnd(); } return result; } catch (Exception ex) { throw new Exception("R Script failed: " + result, ex); } } }