在 asp.net 网络应用程序中使用 R
Using R in asp.net web application
我正在尝试在 asp.net c# web 应用程序中使用 R 脚本。我正在尝试使用一个简单的 r 脚本,它将两个字符串连接成一个字符串。
下面是我的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();
//engine.Evaluate("G<-5+3+2");
engine.Evaluate("G<-paste('hello from r', 'Test')");
Label1.Text = EvaluateExpression(engine, "G").ToString();
}
}
我有一个点击按钮,当我点击它时,我希望输出显示在网页上。
当我 运行 代码并单击按钮时,我得到了文本
NaN
在标签控制页面。然而当我 运行
engine.Evaluate("G<-5+3+2");
而不是
engine.Evaluate("G<-paste('hello from r', 'Test')");
我在我的页面标签中得到正确的值 10。我不知道这个错误,也不知道如何在我的网页中获取输出。
我尝试了一些网站的帮助,但是所有代码都是为控制台应用程序编写的,没有为 asp.net 网络应用程序编写的。
任何人都可以通过在我的网页中显示 r 输出来帮助我解决问题吗?
您根本不需要 EvaluateExpression
。请改用 engine.GetSymbol("G")
。
您得到的 NaN 输出是由于 AsNumeric()
在 EvaluateExpression
内进行的转换。它只适用于数字输出,而不是字符。
这是数字和字符变量的最小示例:
static void Main(string[] args)
{
REngine.SetEnvironmentVariables();
REngine engine = REngine.GetInstance();
engine.Initialize();
engine.Evaluate("x <- 40 + 2");
engine.Evaluate("s <- paste('hello', letters[5])");
var x = engine.GetSymbol("x").AsNumeric().First();
var s = engine.GetSymbol("s").AsCharacter().First();
Console.WriteLine(x);
Console.WriteLine(s);
}
我正在尝试在 asp.net c# web 应用程序中使用 R 脚本。我正在尝试使用一个简单的 r 脚本,它将两个字符串连接成一个字符串。
下面是我的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();
//engine.Evaluate("G<-5+3+2");
engine.Evaluate("G<-paste('hello from r', 'Test')");
Label1.Text = EvaluateExpression(engine, "G").ToString();
}
}
我有一个点击按钮,当我点击它时,我希望输出显示在网页上。
当我 运行 代码并单击按钮时,我得到了文本
NaN
在标签控制页面。然而当我 运行
engine.Evaluate("G<-5+3+2");
而不是
engine.Evaluate("G<-paste('hello from r', 'Test')");
我在我的页面标签中得到正确的值 10。我不知道这个错误,也不知道如何在我的网页中获取输出。 我尝试了一些网站的帮助,但是所有代码都是为控制台应用程序编写的,没有为 asp.net 网络应用程序编写的。
任何人都可以通过在我的网页中显示 r 输出来帮助我解决问题吗?
您根本不需要 EvaluateExpression
。请改用 engine.GetSymbol("G")
。
您得到的 NaN 输出是由于 AsNumeric()
在 EvaluateExpression
内进行的转换。它只适用于数字输出,而不是字符。
这是数字和字符变量的最小示例:
static void Main(string[] args)
{
REngine.SetEnvironmentVariables();
REngine engine = REngine.GetInstance();
engine.Initialize();
engine.Evaluate("x <- 40 + 2");
engine.Evaluate("s <- paste('hello', letters[5])");
var x = engine.GetSymbol("x").AsNumeric().First();
var s = engine.GetSymbol("s").AsCharacter().First();
Console.WriteLine(x);
Console.WriteLine(s);
}