2013-02-09 108 views
5

是否可以在C#中调用用户定义的(自定义)R函数?是否可以在C#中调用用户定义的(自定义)R函数?

例如写入中的R的简单矩阵乘法函数:

matrix_mult = function(a, b) { 
c = a %*% b; 
return c; 
} 

如何可以调用该R函数matrix_mult(A,B)从C#?

+0

[这里](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

+0

你能给我们提供更多关于上下文以及为什么要调用R form c#的原因的信息吗? – agstudy 2013-02-09 16:10:17

+0

@agstudy,以便使用在.net中用函数路由器结构写成的矩阵函数http://finaquant.com/function-router/2802 – tuncalik 2013-02-09 16:40:25

回答

1

简答题:

稍长的答案:错误的工具链。 Windows上的R是使用MinGW gcc端口构建的。链接在不可能到非常脆弱之间。

您只能使用两台机器进行弱耦合,其中一台使用Rserve,并且使用.Net/C#连接。有几个解决方案,例如RserveCLI

8

经过一番研究,我发现了一个答案。

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(); 
    } 
} 
} 
+1

矩阵a和b如何传递给R函数? – 2015-03-16 02:24:18

+0

如果有人想在c#中定义一些输入,然后将它传递给R,那么如何做到这一点?我想传递一个存储在某个变量中的向量,这个变量是我传递给双引号中的R输入向量的变量,但是出现了变量未找到的错误。 有没有办法做到这一点? – 2015-05-14 04:54:50

+0

为了了解如何将数组参数从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

相关问题