通过Ruby on Rails和R语言,在web实现R语言的运行

作者: admin 分类: 统计编程开发            发布时间: 01月17日 16:17

本文的前提是你已经安装好了ROR和R语言,本文的环境是:windows8.1 64位,R-64位,通过Railsinstaller安装的Ruby1.93和rails3.2,并且已经安装了rinruby。

一、定义ROR的访问路径,在项目文件下的config/routes.rb进行如下的修改
  get "rlngs" => "rlngs#index"
  post "rlngs" => "rlngs#run"
二、建立控制器
class RlngsController < ApplicationController
	def index
	end
	def run
		require "rinruby"#加载rinruby库
		@Rtest=params[:Rtest]#接收名为Rtest的值
		@Rtest=@Rtest.gsub("\r\n",";") #这里把接收到的R语句的回车变为;号,如果要处理更复杂的R,这里需要想更多的办法。
		R.eval @Rtest#执行R脚本
	end

end
三、建立视图

在项目文件下的app/views里建立一个与控制器同名的文件夹rlngs。

在rlngs里创建输入R页的视图文件index.html.erb

<form accept-charset="UTF-8" action="/rlngs" method="post">
<p>请输入R语句:</p>
<textarea cols=50 rows=10 name="Rtest" id="Rtest">
x <- rnorm(10)
summary(x)
a <- sd(x)</textarea>
<p></p>
<input name="commit" type="submit" value="运行R" />
</form>

在rlngs里创建运行后的视图文件run.html.erb

运行的R命令如下:</br>
<%=@Rtest %>
<p></p>
四、通过浏览器运行

通过在项目文件中dos运行“rails s”后,在浏览器中输入http://127.0.0.1:3000/rlngs

点击运行R按钮后,如下:

优化:你可以在输入框中用标准的R语言引用一个R脚本文件,如下图。

缺点:运行的结果暂时没有想到什么方法来动态来提取显示到web中。

 

欢迎读者交流指正。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

一条评论
  • liuwei

    2014 年 05 月 22 日 22:16

    你好,我在windows安装RinRuby之后,提示错误:错误: 系统找不到指定的注册表项或值。
    错误: 系统找不到指定的注册表项或值。
    RuntimeError: Cannot locate R executable
    from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rinruby-2.0.3/lib/rinruby.rb:767:in `find_R_on_windows’
    from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rinruby-2.0.3/lib/rinruby.rb:151:in `initialize’
    from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rinruby-2.0.3/lib/rinruby.rb:790:in `new’
    from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/rinruby-2.0.3/lib/rinruby.rb:790:in `’
    from C:/RailsInstaller/Ruby1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’
    from C:/RailsInstaller/Ruby1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’
    from (irb):4
    from C:/RailsInstaller/Ruby1.9.3/bin/irb:12:in `’,请问该如何解决?

发表评论

电子邮件地址不会被公开。 必填项已用*标注