rinruby 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rinruby.rb +2 -8
- data/lib/rinruby/animation.rb +74 -0
- data/lib/rinruby/gif.rb +70 -0
- metadata +38 -35
data/lib/rinruby.rb
CHANGED
@@ -59,7 +59,7 @@
|
|
59
59
|
|
60
60
|
class RinRuby
|
61
61
|
|
62
|
-
VERSION = '1.0.
|
62
|
+
VERSION = '1.0.1'
|
63
63
|
|
64
64
|
require 'socket'
|
65
65
|
|
@@ -573,13 +573,7 @@ class RinRuby
|
|
573
573
|
def find_R_on_windows(cygwin)
|
574
574
|
path = '?'
|
575
575
|
for root in [ 'HKEY_LOCAL_MACHINE', 'HKEY_CURRENT_USER' ]
|
576
|
-
|
577
|
-
`reg query "#{root}\\Software\\R-core\\R" /v "Current Version"`.split("\n").each do |line|
|
578
|
-
next if line !~ /^\s+Current Version\s+REG_SZ\s+(\d\.\d\.\d).*/
|
579
|
-
version = $1
|
580
|
-
break
|
581
|
-
end
|
582
|
-
`reg query "#{root}\\Software\\R-core\\R\\#{version}" /v "InstallPath"`.split("\n").each do |line|
|
576
|
+
`reg query "#{root}\\Software\\R-core\\R" /v "InstallPath"`.split("\n").each do |line|
|
583
577
|
next if line !~ /^\s+InstallPath\s+REG_SZ\s+(.*)/
|
584
578
|
path = $1
|
585
579
|
while path.chomp!
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'rinruby'
|
2
|
+
|
3
|
+
class Animation < RinRuby
|
4
|
+
|
5
|
+
Graphics_Drivers = ['pdf','swf']
|
6
|
+
|
7
|
+
def loop(n)
|
8
|
+
(1..n).each do |i|
|
9
|
+
print "#{100*i/n}% "
|
10
|
+
eval yield(i)
|
11
|
+
end
|
12
|
+
puts
|
13
|
+
end
|
14
|
+
|
15
|
+
def graphics(filename=nil)
|
16
|
+
if ! filename
|
17
|
+
eval "dev.off()",false
|
18
|
+
if @graphics_driver == 'swf'
|
19
|
+
system <<-EOF
|
20
|
+
pdf2swf -bl -o #{@filename}.swf #{@filename}.pdf > /dev/null 2>&1
|
21
|
+
swfdump --html #{@filename}.swf > #{@filename}.html
|
22
|
+
rm #{@filename}.pdf
|
23
|
+
EOF
|
24
|
+
end
|
25
|
+
else
|
26
|
+
graphics if pull("length(dev.list())") > 0
|
27
|
+
begin
|
28
|
+
@graphics_driver = filename[(filename.rindex('.')+1)..-1].downcase
|
29
|
+
rescue
|
30
|
+
raise "File extension must be in [ #{Graphics_Drivers.join(', ')} ]"
|
31
|
+
end
|
32
|
+
if ! Graphics_Drivers.include?(@graphics_driver)
|
33
|
+
raise "File extension must be in [ #{Graphics_Drivers.join(', ')} ]"
|
34
|
+
end
|
35
|
+
@filename = filename[0...filename.rindex('.')]
|
36
|
+
if @graphics_driver == 'pdf'
|
37
|
+
eval "pdf(paste('#{@filename}.pdf'))"
|
38
|
+
elsif @graphics_driver == 'swf'
|
39
|
+
eval "pdf(paste('#{@filename}.pdf'))"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def quit
|
45
|
+
graphics if pull("length(dev.list())") > 0
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
if $0 == __FILE__
|
51
|
+
|
52
|
+
A = Animation.new
|
53
|
+
|
54
|
+
A.graphics "example1.swf"
|
55
|
+
n = 40
|
56
|
+
A.eval "x <- rnorm(#{n})"
|
57
|
+
A.loop(n) do |i|
|
58
|
+
"plot(x[1:#{i}],xlim=c(1,#{n}),ylim=max(abs(x))*c(-1,1),type='l',ylab='')"
|
59
|
+
end
|
60
|
+
|
61
|
+
A.graphics "example2.pdf"
|
62
|
+
A.eval <<-EOF
|
63
|
+
plot(1,type="n",axes=FALSE,xlab="",ylab="")
|
64
|
+
text(1,1,"Thanks!")
|
65
|
+
EOF
|
66
|
+
A.eval <<-EOF
|
67
|
+
plot(1,type="n",axes=FALSE,xlab="",ylab="")
|
68
|
+
text(1,1,"Thanks a lot!")
|
69
|
+
EOF
|
70
|
+
|
71
|
+
A.quit
|
72
|
+
|
73
|
+
end
|
74
|
+
|
data/lib/rinruby/gif.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'rinruby'
|
2
|
+
|
3
|
+
class GIF
|
4
|
+
|
5
|
+
def initialize(r_interpreter,filename)
|
6
|
+
@r = r_interpreter
|
7
|
+
@filename = filename
|
8
|
+
@frame_counter = 0
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.draw(r_interpreter,filename,delay)
|
12
|
+
echo = r_interpreter.echo
|
13
|
+
r_interpreter.echo false
|
14
|
+
animated = self.new(r_interpreter,filename)
|
15
|
+
yield(animated)
|
16
|
+
animated.close(delay)
|
17
|
+
r_interpreter.echo echo
|
18
|
+
end
|
19
|
+
|
20
|
+
def add(statement)
|
21
|
+
@frame_counter += 1
|
22
|
+
filename = name(@frame_counter)
|
23
|
+
@r.eval <<-EOF
|
24
|
+
png(paste('#{filename}.png'))
|
25
|
+
#{statement}
|
26
|
+
dev.off()
|
27
|
+
EOF
|
28
|
+
system "convert #{filename}.png #{filename}.gif"
|
29
|
+
File.delete "#{filename}.png"
|
30
|
+
end
|
31
|
+
|
32
|
+
def loop(n)
|
33
|
+
(1..n).each do |i|
|
34
|
+
puts "#{100*i/n}%"
|
35
|
+
add(yield(i))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def close(delay)
|
40
|
+
system "gifsicle -O2 --delay #{delay} #{@filename}-*.gif > #{@filename}.gif"
|
41
|
+
if @frame_counter > 0
|
42
|
+
(1..@frame_counter).each { |i| File.delete("#{name(i)}.gif") }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def name(index)
|
49
|
+
sprintf("%s-%016x",@filename,index)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
if $0 == __FILE__
|
55
|
+
|
56
|
+
n = 40
|
57
|
+
R.eval "x <- rnorm(#{n})"
|
58
|
+
|
59
|
+
GIF.draw(R,'time-series',5) do |a|
|
60
|
+
a.loop(n) do |i|
|
61
|
+
"plot(x[1:#{i}],xlim=c(1,#{n}),ylim=max(abs(x))*c(-1,1),type='l',ylab='')"
|
62
|
+
end
|
63
|
+
a.add <<-EOF
|
64
|
+
plot(1,type="n",axes=FALSE,xlab="",ylab="")
|
65
|
+
text(1,1,"Thanks!")
|
66
|
+
EOF
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
metadata
CHANGED
@@ -1,47 +1,50 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
summary: Accessing the R interpreter from pure Ruby
|
9
|
-
require_paths:
|
10
|
-
- lib
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
3
|
+
requirements:
|
4
|
+
- - '>='
|
5
|
+
- !ruby/object:Gem::Version
|
6
|
+
version: !str 0
|
7
|
+
version:
|
11
8
|
email: rinruby@ddahl.org
|
9
|
+
cert_chain: []
|
10
|
+
summary: Accessing the R interpreter from pure Ruby
|
11
|
+
post_install_message:
|
12
|
+
extra_rdoc_files: []
|
12
13
|
homepage: http://rinruby.ddahl.org
|
14
|
+
signing_key:
|
15
|
+
name: rinruby
|
16
|
+
rdoc_options: []
|
17
|
+
autorequire:
|
13
18
|
rubyforge_project: rinruby
|
19
|
+
executables: []
|
14
20
|
description:
|
15
|
-
|
21
|
+
specification_version: 2
|
16
22
|
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
25
|
-
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
|
-
authors:
|
30
|
-
- David B. Dahl
|
31
23
|
files:
|
24
|
+
- lib/rinruby
|
32
25
|
- lib/rinruby.rb
|
26
|
+
- lib/rinruby/gif.rb
|
27
|
+
- lib/rinruby/animation.rb
|
33
28
|
- README.txt
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
executables: []
|
41
|
-
|
29
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: !str 0
|
34
|
+
version:
|
42
35
|
extensions: []
|
43
|
-
|
36
|
+
rubygems_version: 1.2.0
|
44
37
|
requirements:
|
45
38
|
- R (http://www.r-project.org), an environment for statistical computing and graphics
|
39
|
+
authors:
|
40
|
+
- David B. Dahl
|
41
|
+
date: 2008-08-20 05:00:00 +00:00
|
42
|
+
platform: ruby
|
43
|
+
test_files: []
|
44
|
+
version: !ruby/object:Gem::Version
|
45
|
+
version: 1.0.1
|
46
|
+
require_paths:
|
47
|
+
- lib
|
46
48
|
dependencies: []
|
47
|
-
|
49
|
+
bindir: bin
|
50
|
+
has_rdoc: true
|