一个用于R程序的Web界面

19

我需要开发一个web界面,允许用户输入一些参数作为R脚本的参数并将结果返回给用户。

我有几个问题要问已经开发过类似web界面的人:

  1. 应该使用哪种Web框架
  2. 在Web应用程序架构中,通信Web界面和R脚本的最简单方法是什么?
  3. 是否应该在服务器上安装R(如果是,则如何从Web界面启动R脚本)

1
http://opencpu.org/ 或者如果您需要与非Web的交互:http://www.rforge.net/Rserve/ - Hansi
2
非常相关:http://stats.stackexchange.com/questions/9699/using-r-online-without-installing-it/9709#9709(RApache可能是您正在寻找的) - nico
R网络应用程序介绍 - Paul Hiemstra
@Hansi 你应该把它转化为一个答案,这样它就可以得到投票并排在最前面了。 - Ruben
6个回答

13

R有自己的Web服务器,所以您可以在R内完成整个操作。然后就不需要烦恼选择框架或让它们互相通信等问题-只需使用一个R框架:

http://cran.r-project.org/web/packages/Rook/index.html

如果出于性能或其他原因您不喜欢上述方法,那么几乎任何框架都可以以某种方式与R通信,因此请使用您熟悉的内容。我会使用Django并通过Rpy2调用R,或运行一个Rserve进程,但如果您能编写PHP或Java程序,则使用基于这些语言的框架。如果您只能编写R程序,请学习Python或使用Rook。


9

7

太酷了!我不知道RStudio可以做到这一点! - nico

5
一种非常方便的方法是结合使用Rstudio Server和Rook(请参见其他答案中的链接)。
Rstudio Server提供了一种非常简单的设置R服务器的方式,可以被网络内的任何人访问。您通常会在该服务器上编辑和运行脚本。
Rook允许您通过混合文本和交互式html代码(如输入字段等)和R代码轻松创建Web界面。一旦您的脚本运行成功,只需从Rstudio Server内启动它,任何有权访问的用户都能够连接到它,IP与Rstudio Server相同。
我正在使用这个设置与googleVis一起,并且非常满意。

3

在我看来,OpenCPU 是目前最先进的免费 R 语言状态(REST)web服务包。Shiny是一款很棒的框架,但是如果您计划使用免费的社区版本,请注意它无法处理并发调用。


也许我的想象力不足,但我不知道OpenCPU如何(轻松地)帮助我开发R语言的Web应用程序。它是一个Web框架吗?如果是,那么它有史以来最差的描述页面。 - Konrad Rudolph
1
OpenCPU将R函数作为REST服务公开。它基于RApache环境,因此从设计上支持并发连接 - 多个用户同时访问您的Web服务没有问题。它还支持SL(Shiny仅在付费版本中才支持这两个功能)。首先,您必须创建一个常规的R包(例如使用RStudio),其中包含您的应用程序:R代码、HTML页面、CSS、JS脚本(jQuery、Bootstrap等)和其他资源。HTML页面是静态的(没有像ASP.NET那样的预处理),但是使用OpenCPU基于Ajax的JS库,您可以轻松修改它们。 - Bastian
当你的应用程序包准备好后,你可以按照通常的方式安装它,就这样。OpenCPU不包含任何“小部件”或“花哨的东西”——它只是一种在Web中公开你的应用程序的方式。它是一个稳定、快速和可靠的解决方案。我商业上长期使用它,从未失望过。唯一的缺点是不能使用基于Java的包(如xlsx),因为有一个非常特定的Java故障。另外请注意,你将不得不开始思考“RESTfuly”(无状态调用),这是现今的标准,但并不简单(你可能会有困难的开端)。 - Bastian
关于文档,嗯...我认为这是个品味问题 :) 我在那里找到了一切开始创建我的第一个应用程序所需的东西。API描述了如何从外部(同步地)调用您的代码。JS库通过异步查询服务器并更新页面内容来帮助您使页面更具动态性。通过GitHub上的演示应用程序,您可以通过示例学习它。还有一个简单的手册,澄清了一些重要问题(但有时使用Google比搜索页面更容易 :))。有一些先前创建RESTful服务的经验将使事情变得更容易。 - Bastian
我认为你在两个评论中提供了比网站上更易于访问的更好的用法描述,这说明了该网站的问题。无论如何,我认为你是正确的,这可能是OP想要的。 - Konrad Rudolph

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接