gpt4 book ai didi

c# - 从 asp.net 应用程序运行 R 脚本并从 r 获取输出

转载 作者:行者123 更新时间:2023-11-30 12:25:29 24 4
gpt4 key购买 nike

我需要从我的 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,并且它被正确地提取。

当我点击按钮时,代码被执行并且我的网络应用程序抛出错误

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

enter image description here

我尝试用谷歌搜索,但没有帮助。有没有办法直接从 asp.net web 应用程序执行 r 文件并获取执行文件的输出。

谁能帮帮我?

最佳答案

我使用了 RScriptRunner,我的解决方案得到了修复。我为 RScriptRunner 创建了一个类文件,并在我的按钮单击事件中调用了该函数。

RScriptRunner可以在命令行模式下使用rscript.exe执行r脚本。

但是我无法从 r 代码中获得输出结果。

关于c# - 从 asp.net 应用程序运行 R 脚本并从 r 获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31290648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com