5.3 FastRWeb跑在Web上的R程序

问题

R做的图怎么显示到Web上面?

引言

一直以来R语言都被用在基于个人电脑的客户端程序上。我们习惯性地下载R安装包,在自己的电脑上面装好,写算法,运行。然后,以贴图或者文档的形式,发表自己的作品。R如果可以运行在Server端,把结果以Web的方式发布,这才是互联网的工作方式!FastRWeb提供一种方式,可以实现B/S结构的R应用。

5.3.1 FastRWeb介绍

FastRWeb是一个基础架构环境, 可以让R脚本运行在任何WebServer上,展示数据和图形。用户通过URL地址与R脚本进行通信交互。FastRWeb可以快速地构建一个R的Web环境,FastRWeb底层依赖于CGI程序,也就是说,只要能支持CGI程序的WebServer,就可以运行FastRWeb。下面以R语言的WebServer库Rserve为例,部署FastRWeb,实现R的Web应用。

FastRWeb的架构如图5-1所示,从图中我们可以看出其架构原理:

1)浏览器通过http请求访问Web服务器;2) Web服务器通过socket,把请求发给Rserve服务器;3)Rserve调用FastRWeb环境,运行R的脚本,返回数据和图片;4)浏览器得到结果,并在web上展示。

FastRWeb架构图

图5-1 FastRWeb架构图

5.3.2 FastRWeb安装

本节使用的系统环境是:

  • Linux: Ubuntu 12.04.2 LTS 64bit
  • R: 3.0.1 x86_64-pc-linux-gnu
  • IP: 192.168.1.201

astRWeb只支持Linux环境。

FastRWeb安装

~ R
> install.packages("FastRWeb")   # 安装FastRWeb包

由于FastRWeb依赖于Cairo库,Cairo安装会用到Linux本地库,请参考1.7节。下面安装Rserve,关于Rserve的使用介绍,请参考5.1节。

> install.packages("Rserve")   # 安装Rserve包

创建FastRWeb基于Rserve的运行环境

~ cd /home/conan/R/x86_64-pc-linux-gnu-library/3.0/FastRWeb  # 进入FastRWeb的安装目录
~ sudo ./install.sh  # 执行安装脚本
Done.
Please check files in /var/FastRWeb/code
If they match tour setup, you can start Rserve using
/var/FastRWeb/code/start

查看生成的目录:/var/FastRWeb/code/

~ cd /var/FastRWeb/code/
~ ls -l
-rw-r--r-- 1 conan conan 1210 Oct 29 16:07 README
-rw-r--r-- 1 conan conan   79 Oct 29 17:50 rserve.conf
-rw-r--r-- 1 conan conan 2169 Oct 29 17:51 rserve.R
-rwxr-xr-x 1 conan conan  457 Oct 29 17:35 start

文件和目录说明:

  • README:帮助说明
  • rserve.conf:Rserve的启动参数
  • rserve.R:Rserve的启动脚本
  • start:启动命令

修改Rserve启动的配置文件:rserve.conf

~ vi rserve.conf
http.port 8888
remote enable
source /var/FastRWeb/code/rserve.R
control enable

默认情况,RServe提供socket通信接口,为了web测试方便,我们改成用http的通信接口。下面修改文件rserve.R, 在文件上的最上面增加2行代码。

~ vi rserve.R
# 增加的内容
library(FastRWeb)
.http.request <- FastRWeb:::.http.request

这样我们就改好了,让http协议作为通信的接口。

5.3.3 FastRWeb使用

启动FastRWeb服务。

~ sudo ./start

R CMD Rserve --RS-conf /var/FastRWeb/code/rserve.conf --vanilla --no-save --RS-enable-remote
R version 3.0.1 (2013-05-16) -- "Good Sport"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

Starting Rserve on conan
Loading packages...
XML: TRUE
Cairo: TRUE
Matrix: TRUE
FastRWeb: TRUE
Rserv started in daemon mode.

从启动日志,我们看出XML, Cairo, Matrix, FastRWeb, Rserv几个包都加载了,正常运行。

查看系统进程和端口:

~ ps -aux|grep Rserve
conan    23739  0.0  1.4 120140 28916 ?        Ss   16:47   0:00 /usr/lib/R/bin/Rserve --RS-conf /var/FastRWeb/code/rserve.conf --vanilla --no-save --RS-enable-remote
~ sudo netstat -nltp|grep Rserve
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      25778/Rserve
tcp        0      0 0.0.0.0:6311            0.0.0.0:*               LISTEN      25778/Rserve

有2个端口被打开了,一个是Rseve的socket端口6311,一个是http端口8888。通过web访问,用浏览器打开:http://192.168.1.201:8888/example1.png ,如图5-2所示。

  rnorm(100)函数Web可视化图

图5-2 rnorm(100)函数Web可视化图

图5-2的R代码,实际对应的是文件:/var/FastRWeb/web.R/example1.png.R

~ vi /var/FastRWeb/web.R/example1.png.R
run <- function(...) {
  p <- WebPlot(600, 600)
  plot(rnorm(100), rnorm(100), pch = 19, col = 2)
  p
}

修改文件/var/FastRWeb/web.R/example1.png.R,在浏览器中刷新页面,结果如图5-3所示。

~ vi /var/FastRWeb/web.R/example1.png.R
run <- function(...) {
  p <- WebPlot(600, 600)
 plot(rnorm(400), rnorm(400), pch = 20, col = 3)
  p
}

rnorm(400) 函数Web可视化图

图5-3 rnorm(400) 函数Web可视化图

这样就实现了通过Web来执行R脚本,在Web上画图。在目录 /var/FastRWeb/web.R/ 下面有几个例子,大家可以参考一下,然后改写自己的R语言脚本。

~ ls -l /var/FastRWeb/web.R
-rw-r--r-- 1 conan conan 790 Oct 29 16:07 common.R
-rw-r--r-- 1 conan conan 316 Oct 29 20:01 example1.png.R
-rw-r--r-- 1 conan conan 520 Oct 29 16:07 example2.R
-rw-r--r-- 1 conan conan 174 Oct 29 16:07 index.R
-rw-r--r-- 1 conan conan 215 Oct 29 16:07 info.R
-rw-r--r-- 1 conan conan  64 Oct 29 16:07 main.R
-rw-r--r-- 1 conan conan 167 Oct 29 16:07 README
-rw-r--r-- 1 conan conan 214 Oct 29 16:07 tmp.R

R脚本文件 example2.R,可以接受页面传参数。

根据FastRWeb的说明,FastRWeb可以通过CGI,与任何的WebServer通信,这样我们就可以把R脚本部署在PHP, Python, Ruby, Java等高级语言的服务器上面了。R-bloggers上有一篇文章,讲FastRWeb部署在基于Apache的XAMPP环境中( http://www.r-bloggers.com/setting-up-fastrweb-on-mac-os-x/ )。感兴趣的同学,自行尝试吧!

results matching ""

    No results matching ""