У меня есть простой скрипт R, который принимает входное значение и выполняет некоторые вычисления на основе входного значения и записывает его в файл csv. Ниже приведен код моего r-скрипта.Использование RScript.exe для запуска rscript с параметром
testfun=function(x){
x<-args[1]
x=sqrt(x)+(x*x)
a=x+x+x
b=data.frame(x,a)
setwd("D:\\R Script")
write.csv(b,"testfun.csv",row.names=F)
}
Я называю это rscript из моего asp.net веб-приложения, используя Rscriptrunner предоставленный Jake Дрю
/// <summary>
/// This class runs R code from a file using the console.
/// </summary>
public class RScriptRunner
{
/// <summary>
/// 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]);
/// </summary>
/// <param name="rCodeFilePath">File where your R code is located.</param>
/// <param name="rScriptExecutablePath">Usually only requires "rscript.exe"</param>
/// <param name="args">Multiple R args can be seperated by spaces.</param>
/// <returns>Returns a string with the R responses.</returns>
public static string RunFromCmd(string rCodeFilePath, string rScriptExecutablePath, string args, int iInput)
{
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();
proc.Close();
}
return result;
}
catch (Exception ex)
{
throw new Exception("R Script failed: " + result, ex);
}
}
}
таким образом, что я призываю мой сценарий rscriptrunner как ниже
int x = 64;
string scriptPath = string.Format(@"C:\Program Files\R\{0}\bin\Rscript.exe", Rversion);
string path = string.Format(@"D:\testfun.r");
string result = RScriptRunner.RunFromCmd(path, scriptPath, path.Replace('\\', '/'), x);
В основном я хочу предоставить значение x из моего веб-приложения в свой код r и получить вывод в файле csv, указанном в r-скрипте.
Я попробовал несколько способов, предусмотренных в нижеприведенных нитей
How can I read command line parameters from an R script?
Run R script with start.process in .net
Однако я не могу получить то, что я хочу. Сценарий не выполняется. Я также попытался добавить args < -commandArgs (TRUE) в свой rscript, но его не работает.
В основном я разработчик .net и хочу запустить r-скрипт из своего веб-приложения из-за некоторой потребности клиента. Я не настолько осведомлен о R, и если кто-то помогает мне в том, как мне передать значение параметра моему r-коду, это было бы полезно для меня.
Это весь ваш код R? Вы определяете функцию, но никогда не используете ее. –
Да. Функция вызывается как testfun (значение x) после выполнения вышеуказанного кода. –