是否可以在C#中调用用户定义的(自定义)R函数?是否可以在C#中调用用户定义的(自定义)R函数?
例如写入中的R的简单矩阵乘法函数:
matrix_mult = function(a, b) {
c = a %*% b;
return c;
}
如何可以调用该R函数matrix_mult(A,B)从C#?
是否可以在C#中调用用户定义的(自定义)R函数?是否可以在C#中调用用户定义的(自定义)R函数?
例如写入中的R的简单矩阵乘法函数:
matrix_mult = function(a, b) {
c = a %*% b;
return c;
}
如何可以调用该R函数matrix_mult(A,B)从C#?
经过一番研究,我发现了一个答案。
1)在MS Visual Studio中打开现有的或新的项目。
2)安装R.NET(的NuGet) http://rdotnet.codeplex.com
安装非常简单: 菜单:Visual Studio中(2012年)>库包管理器>包管理器控制台 式 “安装,包R.NET”
3)中的R初始化的功能和从C# 称之为参见http://rdotnet.codeplex.com/documentation对数据类型中的R
using RDotNet;
class Program
{
static void Main(string[] args)
{
// Set the folder in which R.dll locates.
var envPath = Environment.GetEnvironmentVariable("PATH");
// check the version and path on your computer
var rBinPath = @"C:\Program Files\R\R-2.14.1\bin\x64";
Environment.SetEnvironmentVariable("PATH", envPath + System.IO.Path.PathSeparator + rBinPath);
using (REngine engine = REngine.CreateInstance("RDotNet"))
{
// Initializes settings.
engine.Initialize();
// create an R function
// R style
// See: http://rdotnet.codeplex.com/wikipage?title=Examples&referringTitle=Home
Function matrix_mult = engine.Evaluate(@"matrix_mult <- function(a,b){
c = a %*% b;
return(c);
}").AsFunction();
NumericMatrix d = engine.Evaluate(@"d <- matrix_mult(a,b)").AsNumericMatrix();
Console.WriteLine("Matrix d:");
engine.Evaluate("print(d)");
// convert NumericMatrix of R to double[,] of .net
double[,] darr = new double[d.RowCount, d.ColumnCount];
d.CopyTo(darr, d.RowCount, d.ColumnCount);
Console.ReadKey();
}
}
}
矩阵a和b如何传递给R函数? – 2015-03-16 02:24:18
如果有人想在c#中定义一些输入,然后将它传递给R,那么如何做到这一点?我想传递一个存储在某个变量中的向量,这个变量是我传递给双引号中的R输入向量的变量,但是出现了变量未找到的错误。 有没有办法做到这一点? – 2015-05-14 04:54:50
为了了解如何将数组参数从C#传递到R,您可以访问我的文章“表格数据作为输入到R中的估计函数”,网址为http://finaquant.com/table-data-as-input-to-stimation -functions-in-r/3082在子标题“R与C#中的表函数的集成”下可以看到C#代码示例 – tuncalik 2015-05-15 10:51:46
[这里](http://cran.r-project.org/doc/manuals /r-release/R-exts.html#The-R-API)是指向与* R *交互的* C *手册部分的链接。使用P/Invoke可以相当容易地从C#应用相应的调用。 – 2013-02-09 15:18:53
你能给我们提供更多关于上下文以及为什么要调用R form c#的原因的信息吗? – agstudy 2013-02-09 16:10:17
@agstudy,以便使用在.net中用函数路由器结构写成的矩阵函数http://finaquant.com/function-router/2802 – tuncalik 2013-02-09 16:40:25