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

在网上搜索一下资料,看到该博客:https://cn.mathworks.com/matlabcentral/newsreader/view_thread/282351

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

然后想用R语言实现。

1、先下载R软件:http://mirrors.opencas.cn/cran/,选择base

2、下载RDotNet并编译

下载地址:http://rdotnet.codeplex.com/

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

编译好的RDotner下载地址如下:http://pan.baidu.com/s/1c2NTnK8

3、测试

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

代码如下:

  1. private static void Main(string[] args)
  2. {
  3. string rHome = null;
  4. string rPath = null;
  5. if (args.Length > )
  6. rPath = args[];
  7. if (args.Length > )
  8. rHome = args[];
  9. Console.WriteLine(RDotNet.NativeLibrary.NativeUtility.FindRPaths(ref rPath, ref rHome));
  10. rHome = null;
  11. rPath = null;
  12.  
  13. REngine.SetEnvironmentVariables(rPath: rPath, rHome: rHome);
  14. REngine e = REngine.GetInstance();
  15. //Console.WriteLine(RDotNet.NativeLibrary.NativeUtility.SetEnvironmentVariablesLog);
  16. // .NET Framework array to R vector.
  17. NumericVector group1 = e.CreateNumericVector(new double[] { 30.02, 29.99, 30.11, 29.97, 30.01, 29.99 });
  18. e.SetSymbol("group1", group1);
  19. // Direct parsing from R script.
  20. NumericVector group2 = e.Evaluate("group2 <- c(29.89, 29.93, 29.72, 29.98, 30.02, 29.98)").AsNumeric();
  21.  
  22. // Test difference of mean and get the P-value.
  23. GenericVector testResult = e.Evaluate("t.test(group1, group2)").AsList();
  24. double p = testResult["p.value"].AsNumeric().ToArray()[];
  25.  
  26. Console.WriteLine("Group1: [{0}]", string.Join(", ", group1));
  27. Console.WriteLine("Group2: [{0}]", string.Join(", ", group2));
  28. Console.WriteLine("P-value = {0:0.000}", string.Join(", ", p));
  29.  
  30. e.Dispose();
  31. }

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

如果想指定R软件的路径可以将上面的代码修改如下:

  1. string rHome = @"E:\R-3.2.4revised";
  2. string rPath = Path.Combine(rHome, @"bin\i386");
  3. REngine.SetEnvironmentVariables(rPath,rHome);

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

解决问题参考的博客:

https://psychwire.wordpress.com/2011/06/19/making-guis-using-c-and-r-with-the-help-of-r-net/

http://blog.csdn.net/guoer9973/article/details/45953471

若程序运行失败,提示

Fatal error: Unable to open the base package

和 找不到 R.DLL错误,

说明R软件设置了环境变量,程序会优先使用环境变量,如果R的环境变量和你使用的R软件路径不一致就会出现上面的错误,这时候需要修改或者删除R的环境变量,然后重启一下电脑。

删除方法:

打开注册表:在“运行”里面输入“regedit”

进入下面路径,然后修改或删除R_HOMR值,重启一下电脑就可以了。

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Control\Session Manager\Environment

C# 调用R语言的更多相关文章

  1. .Net调用R语言

    ///加载自己写的R语言算法库 public List<double> GetZTFB(double[] data) { List<double> par = new List ...

  2. .net 调用R语言的函数(计算统计值pvalue 对应excel :ttest)

    Pvalue 计算 项目设计pvalue计算,但是由于.net 没有类似的公式或者函数,最终决定使用.net 调用R语言 采用.net 调用r语言的公用函数 需要安装 r语言环境 https://mi ...

  3. (转)python中调用R语言通过rpy2 进行交互安装配置详解

    python中调用R语言通过rpy2 进行交互安装配置详解(R_USER.R_HOME配置) 2018年11月08日 10:00:11 luqin_ 阅读数:753   python中调用R语言通过r ...

  4. shell中调用R语言并传入参数的两种步骤

    shell中调用R语言并传入参数的两种方法 第一种: Rscript myscript.R R脚本的输出 第二种: R CMD BATCH myscript.R # Check the output ...

  5. JAVA 调用 R 语言

    1 简介 R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要.关于整合,一方面,R中可以创建JAVA对象调用JAVA方法,另一方面,JAVA中可以转换R的数据类型调用R的 ...

  6. Java调用R语言

    R是统计计算的强大工具,JAVA是做应用系统的主流语言.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统. 一.Rserve(远程通信模式) Rserve是一个基于TCP/ ...

  7. Python调用R语言

    网络上经常看到有人问数据分析是学习Python好还是R语言好,还有一些争论Python好还是R好的文章.每次看到这样的文章我都会想到李舰和肖凯的<数据科学中的R语言>,书中一直强调,工具不 ...

  8. C#调用R语言输出图片

    参考:http://rdotnet.codeplex.com/documentation   REngine.SetEnvironmentVariables(); REngine engine = R ...

  9. JAVA 调用 R 语言之升华篇

    由于项目的需要,最近做了一个javaWeb调用R的组件,在这里,我把自己走的一些弯路给大家总结一下: 一.选取什么插件作为java和R之间的通信? 1. 在传统的方式中,大致可以分为两类:一类是JRI ...

随机推荐

  1. call,apply,bind详解

    为什么要改变this指向? 我们知道bind,call,apply的作用都是用来改变this指向的,那为什么要改变this指向呢?请看下面的例子: var name="lucy"; ...

  2. 微信小程序中 不点击picker 点击一个button 怎么调用picker 弹出选择框

    把按钮放在picker区域里就好了 picker本身就是一个区域 <picker mode = "selector" class='info' bindchange=&quo ...

  3. js对数组的元素分割

    文章地址 https://www.cnblogs.com/sandraryan/ 不用方法(模拟方法) <script> var arr = ["hi",2,3,tru ...

  4. CodeForces 825G"Tree Queries"(选根建树)

    传送门 •参考资料 [1]:CodeForces 825G Educational Round #25 G :建树选根大法+O1大法+iostream解绑了还是慢 •题意 给定一颗包含 n 个节点的树 ...

  5. java Scanner(简单文本扫描器)

    Scanner(File source)  构造一个新的 Scanner,它生成的值是从指定文件扫描的. 备注:实现了Iterable接口   package june6D; import java. ...

  6. 【git】Git回退代码到指定版本

    1. 查看所有的历史版本,获取你git的某个历史版本的id, git log2. 回退本地代码库:git reset --hard ID3. 推送到远程服务器:git push -f -u origi ...

  7. P1030 队列的基本操作

    题目描述 现在给你一个队列,它一开始是空的,你需要模拟队列的操作.队列的操作包括如下: "push x":将元素 x 放入队列中,其中x是一个int范围内的整数: "po ...

  8. codemirror 行高 字体 行间距 设置

    用的是 react-codemirror2 样式文件: ... .code-mirror{ font-size : 13px; line-height : 150%; } ... 引入样式文件: .. ...

  9. 关于vue-cli打包配置部署404

    在vue脚手架(vue-cli)下我很很快的就可以搭建自己的开发环境,但是我们把项目编写完后,需要进行打包上线会遇到各种问题,在根据版本问题,(vue3的版本跟之前相比少了很多配置项),下面是我用老版 ...

  10. CF1151div2(Round 553)

    CF1151div2(Round 553) 思路题大赛 A 少考虑了一种情况,到死没想到 B 貌似我随机化50000次,没找到就无解貌似也过了 感觉随随便便乱搞+分类讨论都可以过的样子 #includ ...