2013-02-09 109 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

相關問題