从 .net 调用 R(编程语言)

Posted

技术标签:

【中文标题】从 .net 调用 R(编程语言)【英文标题】:Call R (programming language) from .net 【发布时间】:2011-06-28 20:40:42 【问题描述】:

我正在开发一个应用程序,该应用程序需要在 .net 桌面应用程序中进行大量的统计处理和图像输出。这些问题,包括生成输出图像,似乎很适合 R http://www.r-project.org/

是否有允许我从 .net 调用 R 的包装器、API、SDK 或端口?

【问题讨论】:

使用 R(D)-COM 服务器接口,如下所述:codeproject.com/KB/cs/RtoCSharp.aspx 还有另一种选择:RServeCLI。它允许通过 TCP/IP 连接到 R,支持多个会话并在 Mono 下工作(在 Debian 上使用 R 2.15 测试)。它似乎比 R.NET 少错误。值得一试。 有关 R.NET 的完整示例 C# 源代码,请参阅***.com/questions/5377070/c-sharp-r-interface/… 【参考方案1】:

Shiny 是一个选项。

您可以运行闪亮的应用程序并在浏览器和wpf 浏览器中打开您的报告控件

这里有更详细的解释。它是其他语言的,但我尝试插入英文关键字。所有斜体文本均为英文。

Example in other language but with English keywords

【讨论】:

【参考方案2】:

作为记录,如果你想从 R 调用 C#,请查看https://rclr.codeplex.com/ 的 rClr。

【讨论】:

【参考方案3】:

正如其他人所说,R.NET 有很多缺陷。 为了保护自己免受新 R 版本的影响,您可以使用R-server (rserve) here。

然后您可以使用 rserve-client 来执行您的 R 脚本。 On sourceforge, you will find the C# version.

您需要在服务器上安装 R 1.5+。

【讨论】:

【参考方案4】:

R.NET 与较新版本的 R 相比存在相当多的问题。如果它不能正常工作,它会非常糟糕(并且会继续这样做,除非你确切知道如何修复它)。

就个人而言,我建议使用 R 脚本文件并执行它们。 你应该做的是用

开始你的 R 脚本
> sink()
> #set your working directory here with setwd()
> #your code comes in here
> sink(#name your output file here - could label it with a .txt if you please
+ )

在 .NET 中,您必须通过键入 using System.Diagnostics 来包含 System.Diagnostics 命名空间,然后编写以下代码:

string strCmdLine;
strCmdLine = "R CMD BATCH" + /* the path to your R script goes here */;
System.Diagnostics.Process.Start("CMD.exe",strCmdLine);
process1.Close();

然后您可以像这样使用 StreamReader:

StreamReader ROutput = new StreamReader(/* your R output file's path should go here */)

然后根据需要进行解析(如果您也需要帮助,请参阅 RegEx 和字符串的拆分方法)。

希望这会有所帮助!

【讨论】:

您能否详细说明您在 R.Net 中遇到的问题类型? R 2.15.1 是否也会引发这些问题? @ChristianHudon:主要问题是内存管理。我尝试了一些图形内容(您可以在 R.NET 页面上找到它)并报告了错误,但这些错误从未得到认真解决。这个所谓的“稳定”库自 1.5 年以来一直没有更新,尽管存在许多错误和一些可用的补丁。太糟糕了,这是一个很好的开始。 @ChristianHudon:当我在 R.NET 主页上运行示例时,我在 RDotNet.REngine.Parse() 中得到一个未处理的异常。 “矩阵错误(NA_character_, 0L, 3L):传递给 .Internal(matrix) 的 5 个参数需要 7 个” 最新版本的 R.NET 已修复内存管理问题。【参考方案5】:

我发现这个库更容易使用:

http://rdotnet.codeplex.com/

一些原因:

只需要一个 .NET 程序集 DCOM 服务器实际上需要来自不同地方的多个组件 其中一个组件具有非常严格的许可证。只允许从网站直接下载 - 默认情况下不允许其他形式的分发,这将使部署变得有趣

【讨论】:

以上是关于从 .net 调用 R(编程语言)的主要内容,如果未能解决你的问题,请参考以下文章

记一次.NET 与R语言交互

如何从 .NET 以编程方式调用 SSIS?

一句python两句R:贪心算法简单案例(暨 R语言在for循环中调用字典的方法)

一句python两句R:贪心算法简单案例(暨 R语言在for循环中调用字典的方法)

一句python两句R:贪心算法简单案例(暨 R语言在for循环中调用字典的方法)

从.NET调用WCF服务时如何以编程方式添加soap标头?