Rserve::REXP::Wrapper

Utility module to wrap an Ruby Object into a REXP object.

This facilitates wrapping native ruby objects and arrays into REXP objects that can be pushed to R

@author Romain Francois <francoisromain@free.fr>

Public Class Methods

create_matrix(o) click to toggle source
# File lib/rserve/rexp/wrapper.rb, line 38
def self.create_matrix(o)
  data= o.column_size.times.map {|j|
    o.column(j).to_a
  }.flatten
  attr=REXP::List.new(
    Rlist.new(
      [
      REXP::String.new("matrix"),
      REXP::Integer.new([o.row_size, o.column_size])
      ],
      ["class", "dim" ]
      )
    )
  REXP::Double.new(data, attr)
end
find_type_of_array(o) click to toggle source
# File lib/rserve/rexp/wrapper.rb, line 53
def self.find_type_of_array(o)
  if o.all? {|v| v.nil?}
    REXP::Integer.new([REXP::Integer::NA]*o.size)
  elsif o.all? {|v| v.is_a? Integer or v.is_a? Fixnum or v.nil?}
    REXP::Integer.new(o.map {|v| v.nil? ? REXP::Integer::NA : v})
  elsif o.all? {|v| v.is_a? Numeric or v.nil?}
    REXP::Double.new(o.map {|v| v.nil? ? REXP::Double::NA : v.to_f})
  elsif o.all? {|v| v.is_a? ::String or v.nil?}
    REXP::String.new(o.map {|v| v.nil? ? REXP::String::NA : v})
  elsif o.all? {|v| v.is_a? TrueClass or v.is_a? FalseClass or v.nil?}
    REXP::Logical.new(o.map{|v| v.nil? ? REXP::Logical::NA : (v ? 1 : 0)})
    # mixed values. We must return a LIST!
  else
    REXP::GenericVector.new(
    Rlist.new(
    o.map{|v| wrap(v)}
    )
    )
  end
end
wrap(o) click to toggle source
# File lib/rserve/rexp/wrapper.rb, line 12
def self.wrap(o)
  return o if o.is_a? REXP
  return o.to_REXP if o.respond_to? :to_REXP
  case o
    when TrueClass
      REXP::Logical.new(1)
    when FalseClass
      REXP::Logical.new(0)
    when NilClass
      REXP::Null.new()
    when ::String
      REXP::String.new(o)
    when Integer
      REXP::Integer.new(o)
    when Fixnum
      REXP::Integer.new(o)
    when Float
      REXP::Double.new(o)
    when Array
      find_type_of_array(o)
    when ::Matrix
      create_matrix(o)
    else
      nil
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.