rosar 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. data/README.markdown +35 -0
  2. data/lib/rosar.rb +144 -0
  3. data/test/rtest.rb +27 -0
  4. metadata +67 -0
@@ -0,0 +1,35 @@
1
+ RosaR
2
+ =====
3
+
4
+ Ruby/OSA to Gnu-R interface, useful to plot and analyze data from within ruby.
5
+ It relies on AppleScript, so only works on Apple OS X (Snow Leopard tested).
6
+
7
+ If you have troubles with ruby-osa, install my rubyosa gem:
8
+
9
+ sudo gem install pbosetti-rubyosa
10
+
11
+ Example
12
+ =======
13
+
14
+ require '../lib/rosar'
15
+
16
+ r = ROSAR.instance
17
+
18
+ df = {
19
+ :x => (0..4).to_a,
20
+ :y => [7,2,5.5,8,9,10]
21
+ }
22
+ cols = %w(red green blue darkred darkgreen darkblue)
23
+ r.transfer :p=>(0...100).to_a
24
+ r.plot :x=>:p, :y=>"p^2", :typ=>"'l'"
25
+ 2.upto 7 do |i|
26
+ r.lines :x=>:p, :y=>"#{i}*p^2", :col=>"'#{cols[i-2]}'"
27
+ end
28
+ sleep(2)
29
+ r.data_frame :df, df
30
+ r.attach :df
31
+ r.plot :x=>:x, :y=>"y/2", :typ=>"'b'", :col=>"'darkred'", :xlab=>"'Time (s)'"
32
+ r.grid
33
+ r.abline :h=>[2.5,3.5]
34
+ r.abline "a=0, b=1"
35
+ r.detach :df
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created by Paolo Bosetti on 2008-05-22.
4
+ # Copyright (c) 2008 University of Trento. All rights
5
+ # reserved.
6
+ require 'singleton'
7
+ require 'rubygems'
8
+ require 'rbosa'
9
+
10
+
11
+ =begin rdoc
12
+ Adds a to_r method to standara Arrays, which returns a String representation
13
+ of the equivalent R array object.
14
+ =end
15
+ class Array
16
+ def to_r
17
+ "c(#{self * ','})"
18
+ end
19
+ end
20
+
21
+ class Hash
22
+ def to_r
23
+ str = []
24
+ self.each_pair do |k,v|
25
+ case v
26
+ when String
27
+ str << "#{k}=#{v}"
28
+ when Array
29
+ str << "#{k}=#{v.to_r}"
30
+ else
31
+ str << "#{k}=#{v}"
32
+ end
33
+ end
34
+ str * ", "
35
+ end
36
+ end
37
+
38
+ =begin rdoc
39
+ Usage example:
40
+ r=ROSAR.instance
41
+ a=[1,2,3]
42
+ b=[4,5,6]
43
+ r.transfer :a=>a, :b=>b
44
+ r.plot :x=>:a, :y=>:b, :typ=>"'l'"
45
+ r.grid
46
+
47
+ Example based on dataframes:
48
+ df = {
49
+ :x => [1,2,3,4],
50
+ :y => [7,2,5.5,8]
51
+ }
52
+ r.data_frame :df, df
53
+ r.attach :df
54
+ r.plot :x=>:x, :y=>"y/2", :typ=>"'b'", :xlab=>"'Time (s)'"
55
+ r.grid
56
+ r.abline :h=>[2.5,3.5]
57
+ r.detach :df
58
+ =end
59
+ class ROSAR
60
+ include Singleton
61
+ FIFO = "rosar.fifo"
62
+ attr_reader :r, :console
63
+
64
+ def initialize(r="R")
65
+ @r = OSA.app r
66
+ self.sync_dir
67
+ self.activate
68
+ @console = @r.windows.select {|w| w.name =="R Console"}[0]
69
+ unless FileTest.exists?(FIFO) || FileTest.pipe?(FIFO)
70
+ `mkfifo #{FIFO}` # something nicer has to be done...
71
+ end
72
+ end
73
+
74
+ def minimize
75
+ @console.miniaturized = true
76
+ end
77
+
78
+ def maximize
79
+ @console.miniaturized = false
80
+ end
81
+
82
+ =begin rdoc
83
+ Sets the R's working directory to the current dir of the calling script.
84
+ =end
85
+ def sync_dir(dir=Dir.getwd)
86
+ @r.cmd "setwd('#{dir}')"
87
+ end
88
+
89
+ =begin rdoc
90
+ Brings R windows to foreground.
91
+ =end
92
+ def activate
93
+ @r.activate
94
+ end
95
+
96
+ =begin rdoc
97
+ Transfers an Hash of Arrays to the R workspace. R object names are the
98
+ Hash symbols.
99
+ =end
100
+ def transfer(vars)
101
+ raise "Expecting a Hash" unless vars.class == Hash
102
+ vars.each_pair do |k,v|
103
+ @r.cmd "#{k.to_s}<-#{v.to_r}" if v.class == Array
104
+ end
105
+ end
106
+
107
+ =begin rdoc
108
+ Transfers the Hash of Arrays +df+ to a dataframe named +name+. Uses a FIFO
109
+ to move values around.
110
+ =end
111
+ def data_frame(name, df)
112
+ r_thread = Thread.new do
113
+ @r.cmd "#{name}<-read.table('#{FIFO}', h=T)"
114
+ end
115
+
116
+ File.open("#{FIFO}", "w") do |f|
117
+ f.puts df.keys*"\t"
118
+ df[df.keys[0]].size.times do |i|
119
+ df.each_key do |k|
120
+ f.print "#{df[k][i] || 'NA'}\t"
121
+ end
122
+ f.puts
123
+ end
124
+ end
125
+ r_thread.join
126
+ File.delete FIFO
127
+ end
128
+
129
+ =begin rdoc
130
+ Redirects +method+ to the underlaying OSA object.
131
+ =end
132
+ def method_missing(method, *args)
133
+ case args[0]
134
+ when Hash
135
+ @r.cmd("#{method}(#{args[0].to_r})")
136
+ when Symbol
137
+ @r.cmd("#{method}(#{args[0]})")
138
+ when String
139
+ @r.cmd("#{method}(#{args[0]})")
140
+ when nil
141
+ @r.cmd("#{method}()")
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created by Paolo Bosetti on 2008-05-27.
4
+ # Copyright (c) 2008 University of Trento. All rights
5
+ # reserved.
6
+
7
+ require '../lib/rosar'
8
+
9
+ r = ROSAR.instance
10
+ df = {
11
+ :x => (0..4).to_a,
12
+ :y => [7,2,5.5,8,9,10]
13
+ }
14
+ cols = %w(red green blue darkred darkgreen darkblue)
15
+ r.transfer :p=>(0...100).to_a
16
+ r.plot :x=>:p, :y=>"p^2", :typ=>"'l'"
17
+ 2.upto 7 do |i|
18
+ r.lines :x=>:p, :y=>"#{i}*p^2", :col=>"'#{cols[i-2]}'"
19
+ end
20
+ sleep(2)
21
+ r.data_frame :df, df
22
+ r.attach :df
23
+ r.plot :x=>:x, :y=>"y/2", :typ=>"'b'", :col=>"'darkred'", :xlab=>"'Time (s)'"
24
+ r.grid
25
+ r.abline :h=>[2.5,3.5]
26
+ r.abline "a=0, b=1"
27
+ r.detach :df
metadata ADDED
@@ -0,0 +1,67 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rosar
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.8
5
+ platform: ruby
6
+ authors:
7
+ - Paolo Bosetti
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-15 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: pbosetti-rubyosa
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.4.0
24
+ version:
25
+ description: Ruby/GNU-R interface that uses OSA under OS X.
26
+ email: paolo.bosetti@me.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files: []
32
+
33
+ files:
34
+ - README.markdown
35
+ - lib/rosar.rb
36
+ - test/rtest.rb
37
+ has_rdoc: true
38
+ homepage: http://github.com/pbosetti/flotr
39
+ licenses: []
40
+
41
+ post_install_message:
42
+ rdoc_options:
43
+ - --inline-source
44
+ - --charset=UTF-8
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ version:
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ version:
59
+ requirements: []
60
+
61
+ rubyforge_project: rosar
62
+ rubygems_version: 1.3.5
63
+ signing_key:
64
+ specification_version: 2
65
+ summary: Ruby/GNU-R interface that uses OSA under OS X.
66
+ test_files: []
67
+