是否可以在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