class R::RserveConnectionDsl

defines nice dsl for working with rserve-client

Attributes

args[RW]
conn[RW]
pkg_dir[RW]

Public Class Methods

new(conn, args={}) click to toggle source
# File lib/r.rb, line 47
def initialize conn, args={}
  self.conn = conn
  self.args = args
  self.pkg_dir ||= args.delete(:pkg_dir)
  self.pkg_dir ||= File.join(Rails.root, '/r-packages') if defined?(Rails)
  self.pkg_dir ||= 'r-packages'      
  args.each{|k,v| a(k.to_s, v)} if args.any?
end

Public Instance Methods

a(*args) click to toggle source

short for 'assign', send ruby objects to r, save as variable

# File lib/r.rb, line 81
def a *args
  args[1] = args[1].to_s if args[1].is_a?(Symbol)
  do_conn :assign, *args
end
assert_defined(*keys) click to toggle source
# File lib/r.rb, line 60
def assert_defined *keys
  keys.map do |k|
    begin
      e k.to_s
    rescue
      raise ArgumentError.new("expected #{k} to be defined in R envionment, but was not")
    end
  end
end
clear() click to toggle source

remove defined variables from the R environment

# File lib/r.rb, line 111
def clear
  ve 'rm(list=ls())'
end
do_conn(meth, *args) click to toggle source
# File lib/r.rb, line 56
def do_conn meth, *args
  conn.send(meth, *args)
end
e(*args) click to toggle source

short for 'eval', execute given arguments, collect results, convert to ruby

# File lib/r.rb, line 71
def e *args
  do_conn(:eval, *args).to_ruby
end
install_package(pkgname) click to toggle source
# File lib/r.rb, line 94
def install_package pkgname
  FileUtils.mkdir_p pkg_dir

  unless package_installed? pkgname
    ve "install.packages('#{pkgname}', repos='http://cran.cnr.Berkeley.edu/', depends=c('Depends'))"
  end        
end
installed_packages() click to toggle source
# File lib/r.rb, line 90
def installed_packages
  e "rownames(installed.packages())"
end
library(pkgname, fail_after=300) click to toggle source

attempts to install given R package if necessary and require in the environment via 'library'

# File lib/r.rb, line 103
def library pkgname, fail_after=300
  Timeout::timeout(fail_after) do
    install_package pkgname
    e "library(#{pkgname})"
  end
end
package_installed?(pkgname) click to toggle source
# File lib/r.rb, line 86
def package_installed? pkgname
  e "('#{pkgname}' %in% rownames(installed.packages()) == TRUE)"
end
ve(*args) click to toggle source

short for 'void_eval', just execute the arguments, don't return results

# File lib/r.rb, line 76
def ve *args
  do_conn :void_eval, *args
end