rserve-client 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/History.txt +4 -0
- data/Rakefile +1 -0
- data/lib/rserve.rb +3 -1
- data/lib/rserve/protocol/rexpfactory.rb +7 -4
- data/lib/rserve/rexp.rb +2 -1
- data/lib/rserve/rexp/double.rb +2 -1
- data/lib/rserve/rexp/logical.rb +6 -3
- data/lib/rserve/rexp/string.rb +1 -1
- data/spec/rserve_logical_spec.rb +61 -0
- data/spec/rserve_rexpfactory_spec.rb +33 -1
- data/spec/rserve_rfactor_spec.rb +45 -0
- metadata +14 -4
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/History.txt
CHANGED
data/Rakefile
CHANGED
@@ -6,6 +6,7 @@ require 'rserve'
|
|
6
6
|
Hoe.plugin :git
|
7
7
|
Hoe.spec 'rserve-client' do
|
8
8
|
self.testlib=:rspec
|
9
|
+
self.test_globs="spec/*_spec.rb"
|
9
10
|
self.version=Rserve::VERSION
|
10
11
|
self.rubyforge_name = 'ruby-statsample' # if different than 'rserve'
|
11
12
|
self.developer('Claudio Bustos', 'clbustos_AT_gmail.com')
|
data/lib/rserve.rb
CHANGED
@@ -177,8 +177,9 @@ module Rserve
|
|
177
177
|
d=Array.new(as)
|
178
178
|
(eox-i).times {|i| d[i]=buf[o+i]}
|
179
179
|
o=eox
|
180
|
+
|
180
181
|
d.length.each {|j|
|
181
|
-
if d[j]!=0
|
182
|
+
if d[j]!=0 and d[j]!=1
|
182
183
|
d[j]==REXP::Logical::NA
|
183
184
|
end
|
184
185
|
}
|
@@ -190,9 +191,11 @@ module Rserve
|
|
190
191
|
o+=4
|
191
192
|
d=Array.new(as)
|
192
193
|
as.times {|i| d[i]=buf[o+i]}
|
193
|
-
d.
|
194
|
-
if
|
195
|
-
|
194
|
+
d.collect! {|v|
|
195
|
+
if v!=0 and v!=1
|
196
|
+
REXP::Logical::NA
|
197
|
+
else
|
198
|
+
v
|
196
199
|
end
|
197
200
|
}
|
198
201
|
o=eox
|
data/lib/rserve/rexp.rb
CHANGED
@@ -227,9 +227,10 @@ end
|
|
227
227
|
|
228
228
|
require 'rserve/rexp/vector'
|
229
229
|
require 'rserve/rexp/null'
|
230
|
-
|
231
230
|
require 'rserve/rexp/genericvector'
|
232
231
|
require 'rserve/rexp/integer'
|
232
|
+
require 'rserve/rexp/factor'
|
233
|
+
|
233
234
|
require 'rserve/rexp/double'
|
234
235
|
require 'rserve/rexp/list'
|
235
236
|
require 'rserve/rexp/language'
|
data/lib/rserve/rexp/double.rb
CHANGED
@@ -2,7 +2,8 @@ module Rserve
|
|
2
2
|
class REXP
|
3
3
|
class Double < REXP::Vector
|
4
4
|
attr_reader :payload
|
5
|
-
|
5
|
+
# In Java, you only need to add L at last :(
|
6
|
+
NA = 0x100000000007a2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
6
7
|
def initialize(data, attrs=nil)
|
7
8
|
@payload=case data
|
8
9
|
when Numeric
|
data/lib/rserve/rexp/logical.rb
CHANGED
@@ -13,12 +13,13 @@ module Rserve
|
|
13
13
|
@payload.map {|v| v==NA}
|
14
14
|
end
|
15
15
|
end
|
16
|
+
# l should be a value or array of 0 and 1.
|
16
17
|
def initialize(l,attr=nil)
|
17
18
|
super(attr)
|
18
19
|
if l.is_a? Array
|
19
|
-
@payload=
|
20
|
+
@payload= l
|
20
21
|
else
|
21
|
-
@payload = [ l==1 ? TRUE : FALSE ]
|
22
|
+
@payload = [ l==NA ? NA : (l==1 ? TRUE : FALSE) ]
|
22
23
|
end
|
23
24
|
end
|
24
25
|
def length
|
@@ -27,6 +28,9 @@ module Rserve
|
|
27
28
|
def logical?
|
28
29
|
true
|
29
30
|
end
|
31
|
+
def as_bytes
|
32
|
+
@payload
|
33
|
+
end
|
30
34
|
def as_integers
|
31
35
|
@payload.map {|v| v==NA ? REXP::Integer::NA : ( v == FALSE ? 0 : 1 )}
|
32
36
|
end
|
@@ -41,7 +45,6 @@ module Rserve
|
|
41
45
|
end
|
42
46
|
def false?
|
43
47
|
@payload.map {|v| v==FALSE}
|
44
|
-
|
45
48
|
end
|
46
49
|
end
|
47
50
|
end
|
data/lib/rserve/rexp/string.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.dirname(__FILE__)+"/spec_helper.rb"
|
2
|
+
|
3
|
+
describe Rserve::REXP::Integer do
|
4
|
+
describe "initialization" do
|
5
|
+
it "should accept array as payload" do
|
6
|
+
payload=[0,1,0]
|
7
|
+
a=Rserve::REXP::Logical.new(payload)
|
8
|
+
a.payload.should==payload
|
9
|
+
end
|
10
|
+
it "should accept a single value as payload" do
|
11
|
+
payload=1
|
12
|
+
a=Rserve::REXP::Logical.new(payload)
|
13
|
+
a.payload.should==[ Rserve::REXP::Logical::TRUE ]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
describe "common methods" do
|
17
|
+
before do
|
18
|
+
@n=rand(100)
|
19
|
+
@payload=@n.times.map {rand(2)}
|
20
|
+
@a=Rserve::REXP::Logical.new(@payload)
|
21
|
+
end
|
22
|
+
subject {@a}
|
23
|
+
it "should return correct length of payload" do
|
24
|
+
@a.length.should==@n
|
25
|
+
end
|
26
|
+
it {should be_logical}
|
27
|
+
it "method as_bytes should return payload" do
|
28
|
+
@a.as_bytes.should==@payload
|
29
|
+
end
|
30
|
+
it "method as_integer should return integers" do
|
31
|
+
@a.as_integers.should==@payload.map {|v| v==Rserve::REXP::Logical::TRUE ? 1 : 0}
|
32
|
+
end
|
33
|
+
it "method as_doubles should return floats" do
|
34
|
+
@a.as_doubles.should==@payload.map {|v| v==Rserve::REXP::Logical::TRUE ? 1.0 : 0.0}
|
35
|
+
end
|
36
|
+
it "method as_string should return string" do
|
37
|
+
@a.as_strings.should==@payload.map {|v| v==Rserve::REXP::Logical::TRUE ? "TRUE" : "FALSE"}
|
38
|
+
end
|
39
|
+
it "method true? should return an array with true for TRUE values" do
|
40
|
+
@a.true?.should==@payload.map {|v| v==Rserve::REXP::Logical::TRUE ? true :false}
|
41
|
+
end
|
42
|
+
it "method false? should return an array with true for FALSE values" do
|
43
|
+
@a.false?.should==@payload.map {|v| v==Rserve::REXP::Logical::FALSE ? true :false}
|
44
|
+
end
|
45
|
+
|
46
|
+
it "method is_NA should return coherent answer" do
|
47
|
+
payload=[1,Rserve::REXP::Logical::NA, 0]
|
48
|
+
a=Rserve::REXP::Logical.new(payload)
|
49
|
+
a.na?.should==[false,true,false]
|
50
|
+
a.na?(a.as_bytes[0]).should be_false
|
51
|
+
a.na?(a.as_bytes[1]).should be_true
|
52
|
+
end
|
53
|
+
it "method to_debug_string and to_s returns a coherent response" do
|
54
|
+
@a.to_debug_string.size.should>0
|
55
|
+
@a.to_s.size.should>0
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
end
|
@@ -16,6 +16,11 @@ describe Rserve::Protocol::REXPFactory do
|
|
16
16
|
la.should be_instance_of(Rserve::REXP::Logical)
|
17
17
|
la.true?.should==[true,false,true]
|
18
18
|
end
|
19
|
+
it "should process logical vectors with NA" do
|
20
|
+
la=@r.eval("c(TRUE,NA)")
|
21
|
+
la.should be_instance_of(Rserve::REXP::Logical)
|
22
|
+
la.na?.should==[false,true]
|
23
|
+
end
|
19
24
|
it "should process single double" do
|
20
25
|
la=@r.eval("1.5")
|
21
26
|
la.should be_instance_of(Rserve::REXP::Double)
|
@@ -30,11 +35,38 @@ describe Rserve::Protocol::REXPFactory do
|
|
30
35
|
v.should be_close(a[i],1e-10)
|
31
36
|
}
|
32
37
|
end
|
33
|
-
it "should process
|
38
|
+
it "should process double vector with NA" do
|
39
|
+
la=@r.eval("c(1,NA)")
|
40
|
+
la.should be_instance_of(Rserve::REXP::Double)
|
41
|
+
la.na?.should==[false,true]
|
42
|
+
|
43
|
+
end
|
44
|
+
it "should process string vector" do
|
34
45
|
la=@r.eval("c('abc','def','ghi')")
|
35
46
|
la.should be_instance_of(Rserve::REXP::String)
|
36
47
|
la.as_strings.should==['abc','def','ghi']
|
37
48
|
end
|
49
|
+
it "should process string vector with NA" do
|
50
|
+
la=@r.eval("c('abc','def',NA)")
|
51
|
+
la.should be_instance_of(Rserve::REXP::String)
|
52
|
+
la.na?.should==[false,false,true]
|
53
|
+
|
54
|
+
end
|
55
|
+
it "should process factor" do
|
56
|
+
la=@r.eval <<-EOF
|
57
|
+
state <- c("tas", "sa", "qld", "nsw", "nsw", "nt", "wa", "wa",
|
58
|
+
"qld", "vic", "nsw", "vic", "qld", "qld", "sa", "tas",
|
59
|
+
"sa", "nt", "wa", "vic", "qld", "nsw", "nsw", "wa",
|
60
|
+
"sa", "act", "nsw", "vic", "vic", "act");
|
61
|
+
statef <- factor(state)
|
62
|
+
EOF
|
63
|
+
la.should be_factor
|
64
|
+
la.as_factor.levels.sort.should==%w{act nsw nt qld sa tas vic wa}.sort
|
65
|
+
|
66
|
+
la.as_factor.contains?("tas").should be_true
|
67
|
+
la.as_factor.contains?("nn").should be_false
|
68
|
+
|
69
|
+
end
|
38
70
|
it "should process list" do
|
39
71
|
require 'pp'
|
40
72
|
la=@r.eval("list(name='Fred',age=30,10,20,kids=c(1,2,3))")
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require File.dirname(__FILE__)+"/spec_helper.rb"
|
2
|
+
|
3
|
+
describe Rserve::RFactor do
|
4
|
+
before do
|
5
|
+
@levels=['a','b','c','d']
|
6
|
+
@ids=[1,1,2,2,3,3,4]
|
7
|
+
@base_index=1
|
8
|
+
@factor=Rserve::RFactor.new(@ids,@levels,false,@base_index)
|
9
|
+
end
|
10
|
+
it "method size should return number of ids" do
|
11
|
+
@factor.size.should==@ids.size
|
12
|
+
end
|
13
|
+
it "method [] should return correct value (1 based)" do
|
14
|
+
@ids.each_index {|i|
|
15
|
+
@factor[i].should == @levels[@ids[i]-@base_index]
|
16
|
+
@factor[1].should=='a'
|
17
|
+
@factor[3].should=='b'
|
18
|
+
@factor[5].should=='c'
|
19
|
+
|
20
|
+
}
|
21
|
+
end
|
22
|
+
it "methods contains? should work with integers and strings" do
|
23
|
+
@factor.contains?(1).should be_true
|
24
|
+
@factor.contains?(5).should be_false
|
25
|
+
@factor.contains?('a').should be_true
|
26
|
+
@factor.contains?('z').should be_false
|
27
|
+
end
|
28
|
+
it "methods count should work with integers and strings" do
|
29
|
+
@factor.count(2).should==2
|
30
|
+
@factor.count(5).should==0
|
31
|
+
@factor.count('a').should==2
|
32
|
+
@factor.count('z').should==0
|
33
|
+
end
|
34
|
+
it "method counts_hash should return correct value" do
|
35
|
+
@factor.counts_hash.should=={'a'=>2,'b'=>2,'c'=>2,'d'=>1}
|
36
|
+
end
|
37
|
+
it "method as_integers should return correct values" do
|
38
|
+
@factor.as_integers.should==@ids
|
39
|
+
end
|
40
|
+
|
41
|
+
it "method as_strings should return correct values" do
|
42
|
+
@factor.as_strings==%w{a a b b c c d}
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 4
|
9
|
+
version: 0.1.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Claudio Bustos
|
@@ -149,5 +149,15 @@ rubygems_version: 1.3.6
|
|
149
149
|
signing_key:
|
150
150
|
specification_version: 3
|
151
151
|
summary: Ruby client for Rserve, a Binary R server (http://www.rforge.net/Rserve/)
|
152
|
-
test_files:
|
153
|
-
|
152
|
+
test_files:
|
153
|
+
- spec/rserve_rfactor_spec.rb
|
154
|
+
- spec/rserve_connection_spec.rb
|
155
|
+
- spec/rserve_double_spec.rb
|
156
|
+
- spec/rserve_packet_spec.rb
|
157
|
+
- spec/rserve_rexpfactory_spec.rb
|
158
|
+
- spec/rserve_rexp_spec.rb
|
159
|
+
- spec/rserve_integer_spec.rb
|
160
|
+
- spec/rserve_spec.rb
|
161
|
+
- spec/rserve_protocol_spec.rb
|
162
|
+
- spec/rserve_logical_spec.rb
|
163
|
+
- spec/rserve_talk_spec.rb
|
metadata.gz.sig
CHANGED
Binary file
|