是否可以在C#中调用用户定义的(自定义)R函数?
例如,用R编写的简单矩阵乘法函数:
matrix_mult = function(a, b) {
c = a %*% b;
return c;
}
Run Code Online (Sandbox Code Playgroud)
如何从c#中调用此R函数matrix_mult(a,b)?
经过一些研究,我自己找到了答案.
1)在MS Visual Studio中打开现有项目或新项目.
2)安装R.NET(NuGet) http://rdotnet.codeplex.com
安装很简单:菜单:Visual Studio(2012)>库包管理器>包管理器控制台类型"Install-Package 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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2159 次 |
| 最近记录: |