c# – 从asp.net应用程序运行R脚本并从r获取输出
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 从asp.net应用程序运行R脚本并从r获取输出,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2441字,纯文字阅读大概需要4分钟。
内容图文
我需要从我的asp.net应用程序运行存储在文件夹中的r脚本,并在网页中显示该r脚本的输出.
下面是我的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, string 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(string Rversion = "R-3.2.1")
{
var oldPath = System.Environment.GetEnvironmentVariable("PATH");
var rPath = System.Environment.Is64BitProcess ?
string.Format(@"C:\Program Files\R\{0}\bin\x64", Rversion) :
string.Format(@"C:\Program Files\R\{0}\bin\i386", Rversion);
if (!Directory.Exists(rPath))
throw new DirectoryNotFoundException(
string.Format(" R.dll not found in : {0}", rPath));
var newPath = string.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();
string path = Server.MapPath("~/R Script/rscript.r");
engine.Evaluate("source('" + path + "')");
Label1.Text = EvaluateExpression(engine, "C").ToString();
}
}
rscript.R脚本文件具有以下简单编码
C<-sum(1,2,3,4)
操作是这样一种方式,我有一个按钮,当我单击按钮时,需要执行文件夹中的r脚本,结果值需要显示在我的网页中的标签中.我在web应用程序文件夹中有文件rscript.r并且它被正确拉出.
当我点击按钮时代码被执行,我的Web应用程序抛出错误
Attempted to read or write protected memory. This is often an
indication that other memory is corrupt.
我试图谷歌,但这没有帮助.有没有办法直接从asp.net Web应用程序执行r文件并获取执行文件的输出.
谁能帮我吗?
解决方法:
我使用了RScriptRunner,我的解决方案得到了修复.我为RScriptRunner创建了一个类文件,并在我的按钮单击事件中调用了该函数.
RScriptRunner可以在命令行模式下使用rscript.exe执行r脚本.
但是我无法从r代码中获得输出结果.
内容总结
以上是互联网集市为您收集整理的c# – 从asp.net应用程序运行R脚本并从r获取输出全部内容,希望文章能够帮你解决c# – 从asp.net应用程序运行R脚本并从r获取输出所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。