【问题标题】:Best way to build an application based on R?构建基于 R 的应用程序的最佳方法是什么?
【发布时间】:2011-01-07 18:59:42
【问题描述】:

我正在寻找有关如何构建使用R 进行分析、表生成和绘图的应用程序的建议。我想到的是一个应用程序:

  • 在不同的选项卡中显示各种数据表,有点像在 Excel 中,并且列应该可以通过单击进行排序。
  • 在某些对话框窗口中接受用户输入参数。
  • 在选项卡或新的弹出窗口/框架中动态显示图(即依赖于用户输入)

请注意,我不是在谈论使用R(比如Rattle)探索数据的通用前端/GUI,而是一个特定的应用程序。 我希望看到的一些问题是:

  • 完全基于 R 的方法是否可行(在 Windows 上)? R-Journal 中的 Rattle 文章中的以下段落引起了我的兴趣:

有趣的是, Rattle 的首次实现 实际使用 Python 来实现 的回调和 R 统计,使用rpy。发布 RGtk2 的允许接口 el- Rattle 的元素待写 直接在 R 中,以便 Rattle完全基于 R 的应用程序

  • 如果对 GUI 部分使用另一种语言会更好,哪种语言最适合?我正在寻找一种构建 GUI 相对“无痛”的语言,并且它也与R 很好地集成在一起。从这个 StackOverflow 问题 How should I do rapid GUI development for R and Octave methods (possibly with Python)? 我看到 Python + PyQt4 + QtDesigner + RPy2 似乎是最好的组合。这是共识吗?

  • 任何人都有我所描述类型的特定(开源)应用程序的指针,作为我可以学习的示例?

【问题讨论】:

  • 如果您之前从未构建过 GUI,那么我不确定您是否会在没有一点痛苦的情况下取得成功!
  • 当然我愿意经历一些痛苦:)
  • 我想要仔细评估的一件事是带有可点击标题的网格/表格显示小部件的性能。这些可能具有非常可变的质量。

标签: python user-interface r


【解决方案1】:

有很多方法可以做到这一点,包括您提到的 python 方法。如果您只想在 R 中执行此操作,并且您的目标足够温和,则可以使用 gWidgets 包。这以尽可能轻松的方式暴露了 RGtk2、tcltk 或 qtbase 的一些特性(参见 r-forge 上的 qtinterfaces 项目)。如果你想要更多,看看直接使用这些包。如果您要与他人分享,我会推荐 RGtk2,如果没有,推荐 qtbase 或 tcltk。

【讨论】:

  • +1 -- John 用这些 gWidgets 包装器完成了出色的工作。
  • 感谢@jverzani(很高兴听到我 10 年前阅读的第一个 R 介绍文档的作者的消息!)。我会查看gWidgets 和相关包。我还在寻找一种在 Mac(Snow Leopard)上运行的方法,当我尝试单击 RGtk2 的一个演示对话框时,我不断收到错误消息。这显然是一个普遍的问题......我必须继续挖掘。
  • @jverzani 您的最后一点没有意义,您建议 RGtk2 比 RGtk2 更便携。一定是错字。
  • +1 Michael Lawrence 和 DTL 刚刚在 JSS 中发表了一篇关于 RGtk2 的论文:jstatsoft.org/v37/i08,@Prasad 可能想要查看其中的想法/信息。
  • 好的,我快速浏览了 JSS 论文,看起来 RGtk2 和 gWidgets 是构建使用 R 分析的应用程序的最有希望的方法,特别是对于那些强烈偏好使用 R 编码的人. 我认为这些非常值得花时间学习。
【解决方案2】:

Python + Qt4 + RPy = 大获全胜。

例如,看看 Carson Farmer 用 Qgis 和 ManageR 插件做了什么——它是 Qgis 映射包中地理数据的完整 R 接口。

根据您需要多少统计功能,您甚至可以完全不需要它,在 Python 中进行所有统计,利用 Numpy 数字包和 Qwt 绘图画布等好东西。

【讨论】:

  • +1 Python 和 PyQt 很棒,但可能不是最容易学习的。一旦你掌握了诀窍,那就太好了。 Matplotlib 可能是 Python 世界中最常用的绘图包。
  • 实际上,这个答案真正有见地的部分是认识到,如果用户不需要通用 R 语言的交互优势,那么使用像 Numpy/Scipy 这样的 Python 数字包会使编码更容易。
  • 我绝对希望能够利用复杂的R 包和功能,因此我不会考虑将我的所有代码都使用 Python 和 Python Numerical 包的方法。但是根据我一直在阅读的内容,如果您必须从另一种语言与R 交互,那么最好的语言是Python(这是真的吗?),我如果只是为了 GUI 部分,真的不介意学习 Python(Python 似乎是一门有趣的语言)。
  • @Prasad 也有一些非常复杂的 Python 包,但是由于您没有说明您打算使用的实际方法,因此很难知道您是否真的需要 R .
  • @Prasad 也可以从 rpy2 轻松调用 R 绘图命令。这是rpy.sourceforge.net/rpy2/doc-dev/html/graphics.html
【解决方案3】:

传统的 LAMP + R 后端怎么样?可选的 s/MySQL/Postgres 和可选的 s/PHP/Perl Rapache 看起来也很酷:rapache.net

【讨论】:

  • 我没想到 Apache、MySQL 和 PHP 是绝对必要的!
  • @OneWhoIsUnnamed 你是不是吞下了一个流行词目录?!这与OP的问题有什么关系? -1
  • Apache 和 Jeff 的 RApache(Apache 中的 R)和 John 的 gWidgetsWWW 确实也是一个不错的组合。
  • @David Hefernan:PHP/RApache 允许您创建一个基于 Web 的应用程序,该应用程序使用 R 作为图形/统计数据的后端。所以......没有流行语目录,这是一个完全有效的解决方案。唯一的“问题”是您需要自己的服务器,因为我不知道有任何提供 RApache 的共享主机。
【解决方案4】:

如果您选择 C++,请查看 rcppRinside

Java 可以与 R 结合使用JRI

RServe 为您提供了与 R 交互的 TCP/IP 协议。有一个 Java 客户端和一个 C++ 客户端,因此可以使用它们中的任何一个。

附带说明:您应该注意的另一件事是,R 包含相当多的用 Fortran 和 C 编写的库,可以直接调用。 VGAM 等更高级的包也是如此,它们还包含相当多的 C 例程。根据您想要做什么,您可能会尝试使用这些功能,只是为了避免 R 函数本身的开销。

我自己一直在寻找这些的概述,但 AFAIK 你必须付出一些努力才能得到一切。您当然应该看看R language definitionR Internals

【讨论】:

  • 只是澄清一下——你是说有许多用 c/c++ 编写的 R 的 GUI 库,所以我可以从 R 中“本地”使用它们吗?那些是哪些包?请注意,我的主要要求是有一个友好的 GUI 前端,怕命令行的人可以与之交互。
  • @Prasad:不,我的意思是你也可以在其他语言中使用来自 R 的内部 C 和 Fortran 库。因此,根据您在做什么,C 和您选择的语言之间的接口就足够了。如果您进行大量计算,则所有 R 开销的损失可以大大提高性能。但这不适用于偏离路线,你真的必须知道你在做什么。我一直在研究源代码以找出其中的一些。
  • 好吧,我明白你的意思了——如果我的主要应用程序代码(GUI 等)是用 C++ 编写的,那么我可以直接从我的 C++ 代码中 #include Rcpp 并调用 R 内部。从性能的角度来看,这可能是一个很好的方法。但是用C++写整个App肯定更难,但我不会朝那个方向走——我没那么勇敢:)
  • @Prasad:不完全是。 Rcpp 在 R 和 C++ 之间构建了一个接口,以便在它们之间移动数据对象。它主要用于从 R 中调用 C++ 代码。Rinside(抱歉,忘了提及)允许您在 C++ 中使用 R 代码。可以使用您选择的语言中的适当机制调用 C 和 fortran 库。我刚刚提到它是为了指出 C++ 和 Java 都可以相对容易地与 R 链接。但是如果您更喜欢 Python,请务必使用它。如果您曾经想过采用 C++ 方式,请务必寻找 @Dirk Eddelbuettel 的工作。
猜你喜欢
  • 2018-07-06
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 2015-03-26
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
相关资源
最近更新 更多