Exécuter un script R depuis une application asp.net et obtenir le résultat de r

Je dois exécuter un script stocké dans un dossier de mon application asp.net et afficher le résultat de ce script dans la page Web.

ci-dessous est le code de mon fichier Default.aspx.cs

using RDotNet; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } private static double EvaluateExpression(REngine engine, ssortingng expression) { var expressionVector = engine.CreateCharacterVector(new[] { expression }); engine.SetSymbol("expr", expressionVector); // WRONG -- Need to parse to expression before evaluation //var result = engine.Evaluate("eval(expr)"); // RIGHT way to do this!!! var result = engine.Evaluate("eval(parse(text=expr))"); var ret = result.AsNumeric().First(); return ret; } public static void SetupPath(ssortingng Rversion = "R-3.2.1") { var oldPath = System.Environment.GetEnvironmentVariable("PATH"); var rPath = System.Environment.Is64BitProcess ? ssortingng.Format(@"C:\Program Files\R\{0}\bin\x64", Rversion) : ssortingng.Format(@"C:\Program Files\R\{0}\bin\i386", Rversion); if (!Directory.Exists(rPath)) throw new DirectoryNotFoundException( ssortingng.Format(" R.dll not found in : {0}", rPath)); var newPath = ssortingng.Format("{0}{1}{2}", rPath, System.IO.Path.PathSeparator, oldPath); System.Environment.SetEnvironmentVariable("PATH", newPath); } protected void Button1_Click(object sender, EventArgs e) { SetupPath(); REngine.SetEnvironmentVariables(); REngine engine = REngine.GetInstance(); // REngine requires explicit initialization. // You can set some parameters. engine.Initialize(); ssortingng path = Server.MapPath("~/R Script/rscript.r"); engine.Evaluate("source('" + path + "')"); Label1.Text = EvaluateExpression(engine, "C").ToSsortingng(); } } 

Le fichier de script rscript.R a le codage simple ci-dessous

 C<-sum(1,2,3,4) 

L’opération est telle que j’ai un bouton et que lorsque je clique dessus, le script r du dossier doit être exécuté et la valeur du résultat affichée dans l’étiquette figurant sur ma page Web. J’ai le fichier rscript.r dans le dossier des applications Web et il est correctement extrait.

Lorsque je clique sur le bouton, le code est exécuté et mon application Web génère une erreur.

Tentative de lecture ou d’écriture de la mémoire protégée. Cela indique souvent qu’une autre mémoire est corrompue.

entrez la description de l'image ici

J’ai essayé de google sur mais ce n’était pas utile. Existe-t-il un moyen d’exécuter le fichier r directement à partir d’une application Web asp.net et d’obtenir la sortie du fichier exécuté?

Quelqu’un peut m’aider?

J’ai utilisé le RScriptRunner et ma solution a été corrigée. J’ai créé un fichier de classe pour RScriptRunner et appelé cette fonction dans mon événement de clic de bouton.

RScriptRunner peut exécuter le script r à l’aide de rscript.exe en mode ligne de commande.

Cependant, je ne parviens pas à obtenir le résultat du code r.

ASP.NET ne fonctionne pas bien avec R.NET, non sans résoudre certaines failles de IIS. à faire avec les variables d’environnement. Cela dit, l’exception de violation d’access n’est pas le symptôme révélateur auquel je m’attendais.

Je vous conseillerais de prototyper le code R.NET sans ASP.NET ni même l’interface utilisateur du bureau, si vous n’avez pas commencé de cette façon. Cela peut aider à diagnostiquer si un problème est spécifique à IIS ou non.

Deuxièmement, jetez un oeil aux exemples existants dans: https://github.com/jmp75/rdotnet-onboarding/tree/master/

En particulier, il existe une solution sous “solutions / WebApp” qu’un consortingbuteur et moi (principalement le consortingbuteur) avons mis en place comme exemple. Notez qu’il peut être nécessaire de modifier votre variable d’environnement PATH avant de lancer Visual Studio.

IIS ne vous laissera pas changer de façon permanente une variable environnementale. Je pense que vous travaillez autour de cela cependant, en changeant le chemin à chaque “clic sur un bouton”. Vous trouverez des informations générales sur IIS dans la discussion https://rdotnet.codeplex.com/discussions/462947 , en particulier vers la fin du fil de discussion.