c .net运行r语言,C# 调用R语言

博客讲述了在.NET项目中遇到Matlab DLL调用报错的问题,由于Matlab工具箱限制,无法直接封装某些函数。作者转向使用R语言和RDotNet库作为替代方案。通过下载并编译RDotNet,然后在新的工程中引用并测试调用R的代码,实现了R语言的功能调用,如统计测试。在调用R时,如果需要特定包,需在R环境中安装相应程序包。
摘要由CSDN通过智能技术生成

在.net项目中需要调用Matlab生成的DLL,但是在调用过程中报错,截图如下:

546dd51a866249a027bfba751fad3244.png

知道了我调用的DLL中有Matlab工具箱里面的函数,Matlab不允许某些工具箱中的工具被封装成DLL,于是就出现了上图所示的错误。

然后想用R语言实现。

2、下载RDotNet并编译

下载好后 打开 RDotNet.Tests解决方案,进行编译

3、测试

新建一个工程,引用如下图:

6aadd4ca441c839009b11843d92295af.png

代码如下:

private static void Main(string[] args)

{string rHome = null;string rPath = null;if (args.Length > 0)

rPath= args[0];if (args.Length > 1)

rHome= args[1];

Console.WriteLine(RDotNet.NativeLibrary.NativeUtility.FindRPaths(ref rPath, refrHome));

rHome= null;

rPath= null;

REngine.SetEnvironmentVariables(rPath: rPath, rHome: rHome);

REngine e=REngine.GetInstance();//Console.WriteLine(RDotNet.NativeLibrary.NativeUtility.SetEnvironmentVariablesLog);//.NET Framework array to R vector.

NumericVector group1 = e.CreateNumericVector(new double[] { 30.02, 29.99, 30.11, 29.97, 30.01, 29.99});

e.SetSymbol("group1", group1);//Direct parsing from R script.

NumericVector group2 = e.Evaluate("group2

GenericVector testResult = e.Evaluate("t.test(group1, group2)").AsList();double p = testResult["p.value"].AsNumeric().ToArray()[0];

Console.WriteLine("Group1: [{0}]", string.Join(",", group1));

Console.WriteLine("Group2: [{0}]", string.Join(",", group2));

Console.WriteLine("P-value = {0:0.000}", string.Join(",", p));

e.Dispose();

}

程序会根据R软件的注册表找到对应的dll从而实现调用R语言。

在调用R语言的时候,如果有的程序包没有引用的话需要在R程序菜单下的 “程序包” 来安装对应功能的程序包。

解决问题参考的博客:

原文:http://www.cnblogs.com/GIScore/p/5396647.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值