rserve-simpler 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # right now, using initialize code, so it is very version specific
7
+ gem "rserve-client", "~>0.2.5"
8
+
9
+ # Add dependencies to develop your gem here.
10
+ # Include everything needed to run rake, tests, features, etc.
11
+ group :development do
12
+ gem "spec-more", ">= 0"
13
+ gem "bundler", "~> 1.0.0"
14
+ gem "jeweler", "~> 1.5.2"
15
+ gem "rcov", ">= 0"
16
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,24 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ bacon (1.1.0)
5
+ git (1.2.5)
6
+ jeweler (1.5.2)
7
+ bundler (~> 1.0.0)
8
+ git (>= 1.2.5)
9
+ rake
10
+ rake (0.8.7)
11
+ rcov (0.9.9)
12
+ rserve-client (0.2.5)
13
+ spec-more (0.0.3)
14
+ bacon
15
+
16
+ PLATFORMS
17
+ ruby
18
+
19
+ DEPENDENCIES
20
+ bundler (~> 1.0.0)
21
+ jeweler (~> 1.5.2)
22
+ rcov
23
+ rserve-client (~> 0.2.5)
24
+ spec-more
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2011 Brigham Young University
2
+ Authored by John T. Prince
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,139 @@
1
+ = rserve-simpler
2
+
3
+ rserve-simpler is a simple interface on top of
4
+ {rserve-client}[https://github.com/clbustos/Rserve-Ruby-client], a fantastic
5
+ gem that lets a user communicate with R in a straighforward, efficient way.
6
+
7
+ {rserve-client}[https://github.com/clbustos/Rserve-Ruby-client] is doing all
8
+ the heavy lifting and should be consulted for background.
9
+
10
+ == Synposis
11
+
12
+
13
+ require 'rserve/simpler'
14
+ r = Rserve::Simpler.new
15
+
16
+ # or can initialize a connection held in the 'R' constant:
17
+ require 'rserve/simpler/R'
18
+ R.do_something_fantastic ... # ** not a real method
19
+
20
+ === converse, convert, command
21
+
22
+ These commands specify ways of talking to your Rserve connection. All three
23
+ allow passing names through to R in a hash. They differ chiefly in the type
24
+ of output you'll receive back from R.
25
+
26
+ # converse: to_ruby the result
27
+ r.converse "mean(c(1,2,3))" # -> 2.0
28
+
29
+ # convert: Rserve::REXP result
30
+ rexp = r.convert "mean(c(1,2,3))" # -> #<Rserve::REXP::Double:0x00000002296498 @payload=[2.0], @attr=nil>
31
+ rexp.as_doubles # -> [2.0]
32
+ rexp.to_ruby # -> 2.0
33
+
34
+ # command: boolean reply if things went well
35
+ r.command "z <- mean(c(1,2,3))" # -> true
36
+ # can retrieve variables with converse
37
+ r.converse "z" # -> 2.0
38
+
39
+ converse/convert/command let you name variables in a hash as a shortcut to
40
+ 'assign'. [These examples use Ruby 1.9 hash syntax, but they should work on
41
+ 1.8 if the hashes are keyed old-style {:key => val}]
42
+
43
+ r.converse(a: [1,2,3], b: [4,5,6]) { "cor(a,b)" } # -> 1.0
44
+ # another form doing the same thing
45
+ r.converse("cor(a,b)", a: [1,2,3], b: [4,5,6])
46
+
47
+ ==== prompt-like syntax '>>'
48
+
49
+ '>>' is an alias for converse, so you can write code like this:
50
+
51
+ r >> "mean(c(1,2,3))" # -> 2.0
52
+ # note: use '.' to get proper behavior with multiple args or blocks
53
+ r.>> "cor(a,b)", a: [1,2,3], b: [1,2,3]
54
+
55
+ === simple DataFrame
56
+
57
+ ==== with a hash
58
+
59
+ Column names are derived from hash keys (#keys). Ruby 1.9 hashes keep track
60
+ of insertion order. Use an OrderedHash (gem install orderedhash) for ruby
61
+ 1.8, or set colnames.
62
+
63
+ hash = {
64
+ var1: [1,2,3,4],
65
+ fac1: [3,4,5,6],
66
+ res1: [4,5,6,7]
67
+ }
68
+ # convert with hash.to_dataframe or Rserve::DataFrame.new(hash)
69
+ r.command( df: hash.to_dataframe ) do
70
+ %Q{
71
+ pdf("out.pdf")
72
+ plot(df)
73
+ dev.off()
74
+ }
75
+ end
76
+
77
+ ==== with an array of Structs
78
+
79
+ DataRow = Struct.new(:var1, :fac1, :res1)
80
+ structs = [
81
+ DataRow.new(1,3,4),
82
+ DataRow.new(2,4,5),
83
+ DataRow.new(3,5,6),
84
+ DataRow.new(4,6,7)
85
+ ]
86
+ datafr = Rserve::DataFrame.from_structs(structs)
87
+ reply = r.converse("summary(df)", df: datafr).each_cons(6).to_a
88
+ datafr.colnames.zip(reply) {|name,data| puts [name].+(data).join("\n ") }
89
+
90
+ ## outputs -> :
91
+ var1
92
+ Min. :1.00
93
+ 1st Qu.:1.75
94
+ Median :2.50
95
+ Mean :2.50
96
+ 3rd Qu.:3.25
97
+ Max. :4.00
98
+ fac1
99
+ Min. :3.00
100
+ 1st Qu.:3.75
101
+ ...
102
+
103
+ === Notes on plotting
104
+
105
+ Rserve is great for graphical output. Here are some pointers when getting started with plotting:
106
+
107
+ ==== plot to screen
108
+
109
+ r.command "plot(c(1,2,3), c(3,4,5))"
110
+ # if you resize a window (at least on Ubuntu) you may need to re-issue the call
111
+ r.command "plot(c(1,2,3), c(3,4,5))"
112
+ # return a list of currently used devices (device 2 is the only one being used)
113
+ # to_ruby returns an array of 1 value as a number
114
+ r.converse "dev.list()" # -> 2
115
+ # shut off graphics device 2
116
+ r.command "dev.off(2)"
117
+ r.command "graphics.off()" # shut off all graphics
118
+
119
+ ==== plot to file
120
+
121
+ Files are written below the workdir specified when the Rserve connection was
122
+ made (see {Rserve configuration}[http://www.rforge.net/Rserve/doc.html#conf]
123
+ for background) and this is "/tmp/Rserve" on my system.
124
+
125
+ r.>> "pdf('output.pdf')", "plot(c(1,2,3),c(4,5,6))", "dev.off()"
126
+ # outputs file /tmp/Rserv/conn156/output.pdf
127
+ # note the connection number dir!
128
+ # (I haven't figured out how to predict this number)
129
+
130
+ == TODO
131
+
132
+ * simple option to use pwd as default directory
133
+ * quiet the startup of Rserve by default
134
+ * wrap graphic output commands
135
+
136
+ == Copyright
137
+
138
+ see LICENSE.txt
139
+
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "rserve-simpler"
16
+ gem.homepage = "http://github.com/jtprince/rserve-simpler"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{simple interface for interacting with R through Rserve}
19
+ gem.description = %Q{interface layered on top of rserve-client gem for interacting with R}
20
+ gem.email = "jtprince@gmail.com"
21
+ gem.authors = ["John Prince"]
22
+ # Include your dependencies below. Runtime dependencies are required when using your gem,
23
+ # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
24
+ # gem.add_runtime_dependency 'jabber4r', '> 0.1'
25
+ # gem.add_development_dependency 'rspec', '> 1.2.3'
26
+ end
27
+ Jeweler::RubygemsDotOrgTasks.new
28
+
29
+ require 'rake/testtask'
30
+ Rake::TestTask.new(:spec) do |spec|
31
+ spec.libs << 'lib' << 'spec'
32
+ spec.pattern = 'spec/**/*_spec.rb'
33
+ spec.verbose = true
34
+ end
35
+
36
+ require 'rcov/rcovtask'
37
+ Rcov::RcovTask.new do |spec|
38
+ spec.libs << 'spec'
39
+ spec.pattern = 'spec/**/*_spec.rb'
40
+ spec.verbose = true
41
+ end
42
+
43
+ task :default => :spec
44
+
45
+ require 'rake/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "rserve-simpler #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
File without changes
@@ -0,0 +1,49 @@
1
+
2
+ module Rserve
3
+ # An R-centric container for storing data frame-ish data
4
+ class DataFrame
5
+ attr_accessor :rownames
6
+ attr_accessor :hash
7
+
8
+ # takes an array of structs and returns a data frame object
9
+ def self.from_structs(array)
10
+ names = array.first.members
11
+ lengthwise_arrays = names.map { Array.new(names.size) }
12
+ array.each_with_index do |struct,m|
13
+ struct.values.each_with_index do |val,n|
14
+ lengthwise_arrays[n][m] = val
15
+ end
16
+ end
17
+ hash = {}
18
+ names.zip(lengthwise_arrays) do |name, lengthwise_array|
19
+ hash[name] = lengthwise_array
20
+ end
21
+ self.new(hash)
22
+ end
23
+
24
+ def colnames() @hash.keys end
25
+
26
+ # takes an ordered hash, where the col_name is the key and the data rows
27
+ # are an array of values. The default ordering of the hash keys will be
28
+ # used as the colnames. This works great for ruby 1.9 (which remembers
29
+ # ordering). Use an OrderedHash for ruby 1.8. The rownames can be used
30
+ # to specify the names of the rows (remains nil if no values specified)
31
+ def initialize(ordered_hash, rownames=nil)
32
+ @hash = ordered_hash
33
+ @rownames = rownames
34
+ end
35
+
36
+ def ==(other)
37
+ (self.hash == other.hash) && (self.rownames == other.rownames)
38
+ end
39
+ end
40
+
41
+ end
42
+
43
+ class Hash
44
+ def to_dataframe(rownames=nil)
45
+ obj = Rserve::DataFrame.new(self)
46
+ obj.rownames = rownames if rownames
47
+ obj
48
+ end
49
+ end
@@ -0,0 +1,77 @@
1
+
2
+ require 'rserve'
3
+ require 'rserve/rexp'
4
+ require 'rserve/data_frame'
5
+
6
+ class Rserve::Simpler < Rserve::Connection
7
+
8
+ # assigns variables and returns an array of commands to be evaluated
9
+ def with(*args, &block)
10
+ if args.last.is_a? Hash
11
+ hash = args.pop # remove the hash
12
+ hash.each do |sym, obj|
13
+ rserve_compat_obj =
14
+ case obj
15
+ when Rserve::DataFrame
16
+ wrapped_lists = obj.hash.values.map {|v| Rserve::REXP::Wrapper.wrap(v) }
17
+ z = Rserve::Rlist.new(wrapped_lists, obj.hash.keys.map(&:to_s))
18
+ Rserve::REXP.create_data_frame(z)
19
+ else
20
+ obj
21
+ end
22
+
23
+ assign sym.to_s, rserve_compat_obj
24
+
25
+ # this is super hackish but I tried "correct" methods to do this
26
+ # and they do not want to work.
27
+ # TODO: roll creation of row.names into create_data_frame method
28
+ if obj.is_a?(Rserve::DataFrame) && obj.rownames
29
+ tmp_var = "#{sym}__rownames__tmp__"
30
+ # all rownames become string arrays:
31
+ assign tmp_var, Rserve::REXP::String.new(obj.rownames)
32
+ void_eval( ["row.names(#{sym}) <- #{tmp_var}", "rm(#{tmp_var})"].join("\n") )
33
+ end
34
+
35
+ end
36
+ end
37
+ to_eval = args
38
+ unless block.nil?
39
+ to_eval.push(*block.call)
40
+ end
41
+ to_eval
42
+ end
43
+
44
+ # eval and cast reply .to_ruby
45
+ #
46
+ # typically, a single string is passed in either as the first argument or
47
+ # with the block. The results of .to_ruby are passed back to the caller.
48
+ # However, if multiple strings are passed in (either as multiple string
49
+ # arguments or as multiple strings in the block, or one of each, etc.) the
50
+ # reply will be given as an array, one reply for each string.
51
+ def converse(*args, &block)
52
+ reply = with(*args, &block).map do |str|
53
+ response = self.eval(str)
54
+ reply = nil
55
+ begin ; reply = response.to_ruby
56
+ rescue ; reply = response
57
+ end
58
+ reply
59
+ end
60
+ (reply.size == 1) ? reply.first : reply
61
+ end
62
+
63
+ alias_method '>>'.to_sym, :converse
64
+
65
+ # void_eval
66
+ def command(*args, &block)
67
+ self.void_eval with(*args, &block).join("\n")
68
+ end
69
+
70
+ def convert(*args, &block)
71
+ reply = with(*args, &block).map do |str|
72
+ self.eval(str)
73
+ end
74
+ (reply.size == 1) ? reply.first : reply
75
+ end
76
+
77
+ end
@@ -0,0 +1,3 @@
1
+
2
+ require 'rserve/simpler'
3
+ R = Rserve::Simpler.new
@@ -0,0 +1,69 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{rserve-simpler}
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["John Prince"]
12
+ s.date = %q{2011-02-14}
13
+ s.description = %q{TODO: longer description of your gem}
14
+ s.email = %q{jtprince@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "lib/rserve-simpler.rb",
28
+ "lib/rserve/data_frame.rb",
29
+ "lib/rserve/simpler.rb",
30
+ "lib/rserve/simpler/R.rb",
31
+ "spec/rserve/simpler_spec.rb",
32
+ "spec/spec_helper.rb"
33
+ ]
34
+ s.homepage = %q{http://github.com/jtprince/rserve-simpler}
35
+ s.licenses = ["MIT"]
36
+ s.require_paths = ["lib"]
37
+ s.rubygems_version = %q{1.3.7}
38
+ s.summary = %q{TODO: one-line summary of your gem}
39
+ s.test_files = [
40
+ "spec/rserve/simpler_spec.rb",
41
+ "spec/spec_helper.rb"
42
+ ]
43
+
44
+ if s.respond_to? :specification_version then
45
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
46
+ s.specification_version = 3
47
+
48
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
+ s.add_runtime_dependency(%q<rserve-client>, ["~> 0.2.5"])
50
+ s.add_development_dependency(%q<spec-more>, [">= 0"])
51
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
52
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
53
+ s.add_development_dependency(%q<rcov>, [">= 0"])
54
+ else
55
+ s.add_dependency(%q<rserve-client>, ["~> 0.2.5"])
56
+ s.add_dependency(%q<spec-more>, [">= 0"])
57
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
58
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
59
+ s.add_dependency(%q<rcov>, [">= 0"])
60
+ end
61
+ else
62
+ s.add_dependency(%q<rserve-client>, ["~> 0.2.5"])
63
+ s.add_dependency(%q<spec-more>, [">= 0"])
64
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
65
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
66
+ s.add_dependency(%q<rcov>, [">= 0"])
67
+ end
68
+ end
69
+
@@ -0,0 +1,126 @@
1
+ require 'spec_helper'
2
+
3
+ require 'rserve/simpler'
4
+
5
+ describe "initializing a connection held in 'R'" do
6
+ it 'require "rserve/simpler/R" # loads a connection into R' do
7
+ require 'rserve/simpler/R'
8
+ R.converse("mean(c(1,2,3))").is 2.0
9
+ R.close
10
+ end
11
+ end
12
+
13
+ describe 'rserve connection with simpler' do
14
+ xit 'is quiet on startup' do
15
+ @r = Rserve::Simpler.new
16
+ end
17
+ end
18
+
19
+ describe 'rserve connection with simpler additions' do
20
+
21
+ before do
22
+ @r = Rserve::Simpler.new
23
+ end
24
+
25
+ after do
26
+ @r.close
27
+ end
28
+
29
+ it 'converses with R using strings' do
30
+ # both sides speak native
31
+ ok @r.connected?
32
+ reply = @r.converse "mean(c(1,2,3))"
33
+ @r.converse("mean(c(1,2,3))").is 2.0
34
+ end
35
+
36
+ it 'converses with R using arrays and numbers' do
37
+ @r.converse("cor(a,b)", :a => [1,2,3], :b => [4,5,6]).is 1.0
38
+ @r.converse(:a => [1,2,3], :b => [4,5,6]) { "cor(a,b)" }.is 1.0
39
+ @r.converse(:a => 3) { "mean(a)" }.is 3.0
40
+ end
41
+
42
+ it 'can converse in sentences' do
43
+ (mean, cor) = @r.converse("mean(a)", "cor(a,b)", :a => [1,2,3], :b => [4,5,6])
44
+ mean.is 2.0
45
+ cor.is 1.0
46
+ # not sure why you'd want to do this, but this is okay
47
+ (mean, cor) = @r.converse("mean(a)") { "cor(a,b)" }
48
+ # also okay
49
+ (mean, cor) = @r.converse "mean(a)", "cor(a,b)"
50
+ end
51
+
52
+ it 'has a prompt-like syntax' do
53
+ reply = @r >> "mean(c(1,2,3))"
54
+ reply.is 2.0
55
+ reply = @r.>> "cor(a,b)", a: [1,2,3], b: [1,2,3]
56
+ reply.is 1.0
57
+ end
58
+
59
+ it "commands R (giving no response but 'true')" do
60
+ @r.command(:a => [1,2,3], :b => [4,5,6]) { "z = cor(a,b)" }.is true
61
+ @r.converse("z").is 1.0
62
+ end
63
+
64
+ it "convert to REXP" do
65
+ reply = @r.convert(:a => [1,2,3], :b => [4,5,6]) { "cor(a,b)" }
66
+ ok reply.is_a?(Rserve::REXP::Double)
67
+ reply.as_doubles.is [1.0]
68
+ reply.to_ruby .is 1.0
69
+ end
70
+
71
+ xit "returns the REXP if to_ruby raises an error" do
72
+ # still need to test this
73
+ flunk
74
+ end
75
+
76
+ end
77
+
78
+ if RUBY_VERSION > '1.9'
79
+
80
+ # TODO: write these compatible for 1.8
81
+
82
+ describe 'rserve with DataFrame convenience functions' do
83
+
84
+ Row = Struct.new(:fac1, :var1, :res1)
85
+
86
+ before do
87
+ @r = Rserve::Simpler.new
88
+ @hash = {:fac1 => [1,2,3,4], :var1 => [4,5,6,7], :res1 => [8,9,10,11]}
89
+ @colnames = %w(fac1 var1 res1).map(&:to_sym)
90
+ @ar_of_structs = [Row.new(1,4,8), Row.new(2,5,9), Row.new(3,6,10), Row.new(4,7,11)]
91
+ end
92
+
93
+ after do
94
+ @r.close
95
+ end
96
+
97
+ it 'gives hashes a .to_dataframe method' do
98
+ # only need to set the colnames with Ruby 1.8 (unless using OrderedHash)
99
+ df1 = Rserve::DataFrame.new(@hash)
100
+ df2 = @hash.to_dataframe
101
+ df2.colnames.is @colnames
102
+ df1.is df2
103
+ df2.colnames.is @colnames
104
+ df2.rownames.is nil
105
+ df2.rownames = [1,2,3,4]
106
+ df2.rownames.is [1,2,3,4]
107
+ end
108
+
109
+ it 'converts an array of parallel structs into a dataframe' do
110
+ df = Rserve::DataFrame.from_structs( @ar_of_structs )
111
+ df.is @hash.to_dataframe
112
+ end
113
+
114
+ it 'accepts simple dataframes when conversing with R' do
115
+ @r.converse(:df => @hash.to_dataframe) { "names(df)" }.is %w(fac1 var1 res1)
116
+ end
117
+
118
+ it 'accepts dataframes with rownames when conversing with R' do
119
+ rownames = [11,12,13,14]
120
+ @r.converse(:df => @hash.to_dataframe(rownames)) { "row.names(df)" }.is rownames.map(&:to_s)
121
+ rownames = %w(row1 row2 row3 row4)
122
+ @r.converse(:df => @hash.to_dataframe(rownames)) { "row.names(df)" }.is rownames
123
+ end
124
+ end
125
+
126
+ end
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'spec/more'
11
+
12
+ Bacon.summary_on_exit
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rserve-simpler
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - John Prince
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-02-14 00:00:00 -07:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rserve-client
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 2
30
+ - 5
31
+ version: 0.2.5
32
+ type: :runtime
33
+ prerelease: false
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: spec-more
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: bundler
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 1
57
+ - 0
58
+ - 0
59
+ version: 1.0.0
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: jeweler
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ segments:
71
+ - 1
72
+ - 5
73
+ - 2
74
+ version: 1.5.2
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: *id004
78
+ - !ruby/object:Gem::Dependency
79
+ name: rcov
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *id005
91
+ description: interface layered on top of rserve-client gem for interacting with R
92
+ email: jtprince@gmail.com
93
+ executables: []
94
+
95
+ extensions: []
96
+
97
+ extra_rdoc_files:
98
+ - LICENSE.txt
99
+ - README.rdoc
100
+ files:
101
+ - .document
102
+ - Gemfile
103
+ - Gemfile.lock
104
+ - LICENSE.txt
105
+ - README.rdoc
106
+ - Rakefile
107
+ - VERSION
108
+ - lib/rserve-simpler.rb
109
+ - lib/rserve/data_frame.rb
110
+ - lib/rserve/simpler.rb
111
+ - lib/rserve/simpler/R.rb
112
+ - rserve-simpler.gemspec
113
+ - spec/rserve/simpler_spec.rb
114
+ - spec/spec_helper.rb
115
+ has_rdoc: true
116
+ homepage: http://github.com/jtprince/rserve-simpler
117
+ licenses:
118
+ - MIT
119
+ post_install_message:
120
+ rdoc_options: []
121
+
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ hash: -3232687242390354005
130
+ segments:
131
+ - 0
132
+ version: "0"
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ none: false
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ segments:
139
+ - 0
140
+ version: "0"
141
+ requirements: []
142
+
143
+ rubyforge_project:
144
+ rubygems_version: 1.3.7
145
+ signing_key:
146
+ specification_version: 3
147
+ summary: simple interface for interacting with R through Rserve
148
+ test_files:
149
+ - spec/rserve/simpler_spec.rb
150
+ - spec/spec_helper.rb