simpler
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:simpler ("Simple R") is a lightweight wrapper of R (really Rscript) inspired by the gnuplot and rsruby gems.
= simpler

simpler ("simple R") is a lightweight wrapper that calls R (really Rscript)
from within ruby.  It is designed to favor R in syntax.

This is still very pre-alpha and the interface is subject to change.

=== RSRuby, RinRuby, or Simpler?

You should probably take a look at rsruby--it's a fantastic gem.  Embedding R,
rather than calling out to R can make calls 10X faster (according to {Ryan
Davis}[http://www.ruby-forum.com/topic/670136#969929]).  Plus, if you need to
evaluate R code with rsruby, you can use this kind of call:

    RSRuby.instance.eval_R r_src

However, if you want to work with a system designed for using native R code,
or if you can't get rsruby compiling properly, RinRuby or Simpler may be
useful to you.

RinRuby[https://sites.google.com/a/ddahl.org/rinruby-users/] has the same
design goals as Simpler and is much more thorough in its implementation and
execution.  You should definitely take a look at RinRuby. 

Simpler is very simple code that uses Rscript (R's scripting command) to plot
R code.  If a robust, minimalist approach appeals to you, maybe simpler is for
you.  I like to use it when I'm not using RSRuby or RinRuby.

== Examples

(the API is still unstable)

==== Basic execution (Raw input, raw output)

    require 'simpler'

    r = Simpler.new
    r >> "mean(c(1,2,3))"   # -> "[1] 2\n"  (a Simpler::Reply object)
    
==== Using ruby variables (calculating correlation coefficient):

    x = [1,2,7]
    y = [3,4,8]
    # variables are given a symbol name
    reply = r.eval!(x => :xr, y => :yr) { "cor(xr,yr)" }   # -> "[1] 0.9994238\n"
    # the naming can be in any order, so in ruby > 1.9, this is valid:
    reply = r.eval!(xr: x, yr: y) { "cor(xr,yr)" }

Any object that has a to_r method can be passed in.  Currently, Array
and Simpler::DataFrame are the only objects with this method defined, but that
actually covers a lot of ground.  Easy to define your own to_r method for
special data as needed.

==== Show a plot

Simpler uses Rscript to run R commands.  So, all plots that would
normally go to X11 are saved to "Rplots.pdf".  *show!* is precisly the same as
eval!, but it also opens "Rplots.pdf" with @pdf_viewer:

    r.pdf_viewer = "acroread"
    r.show!(x,y) {|xr,yr| "plot(#{xr}, #{yr})" }

==== Using DataFrames

    hash = {
      :one => [1,2,6,7],
      :two => [3,4,2,9],
      :three => [3,1,1,7],
    }

    df = Simpler::DataFrame.new(hash)
    r.show!(df => :dfr) { "plot(dfr)" }

One can also make a data frame from an array of structs with Simpler::DataFrame.from_structs

==== When Errors Arise

On an R error, raises a Simpler::RError that returns the R error message and
shows the R code submitted. (the @command queue is still cleared)

    # this will raise a descriptive Simpler::RError error
    r.eval! { "plot(c(1,2,3),c(1,2))" }

== Credit

Simpler is loosely inspired by the original gnuplot and, of course, the
excellent rsruby.  I ran into RinRuby after writing Simpler: I probably
wouldn't have written Simpler had I seen it first, but since it is here and
since it has a slightly different design and implementation I will continue to
support it.

==Casting

All replies are of class Simpler::Reply (a string subclass), so casting can be
done in a way that works for you by defining your own methods.

== Copyright

Copyright (c) 2010 John Prince. See LICENSE for details.

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。