rbbt-util 5.17.18 → 5.17.19
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.
- checksums.yaml +4 -4
- data/lib/rbbt/resource/path.rb +1 -1
- data/lib/rbbt/tsv/stream.rb +29 -8
- data/lib/rbbt/util/R/model.rb +13 -0
- data/lib/rbbt/util/misc/inspect.rb +7 -5
- data/test/rbbt/tsv/test_stream.rb +22 -0
- data/test/rbbt/util/R/test_model.rb +18 -0
- data/test/rbbt/util/test_open.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8086326d7f2641311bb29a47622ed665b7810bbf
|
|
4
|
+
data.tar.gz: bb5058f3d0f22653fb8f01bcb2ff7660e581eb17
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ab07516d71e624866421fbd4041e27ea9964d871f13bbda1ceb6871215815d7e847eb2f6af2f21e001417d1a933804e08d28db3e26b4596365a29747dc4d48d2
|
|
7
|
+
data.tar.gz: f58d0cad5b049f1fdc902a0d14b9cd39ffe3b0104017e08ce4941cf1f73014d95e0989e26e9d3878a9e62948f7928c1b7ed0fec5864e5e3cafbfc761dcc28110
|
data/lib/rbbt/resource/path.rb
CHANGED
|
@@ -167,7 +167,7 @@ module Path
|
|
|
167
167
|
|
|
168
168
|
search_paths.keys.
|
|
169
169
|
collect{|where| Dir.glob(find(where, Path.caller_lib_dir, search_paths))}.
|
|
170
|
-
compact.flatten.collect{|path| Path.setup(path, self.resource, self.pkgdir)}
|
|
170
|
+
compact.flatten.uniq.collect{|path| Path.setup(path, self.resource, self.pkgdir)}
|
|
171
171
|
end
|
|
172
172
|
#{{{ Methods
|
|
173
173
|
|
data/lib/rbbt/tsv/stream.rb
CHANGED
|
@@ -18,7 +18,7 @@ module TSV
|
|
|
18
18
|
|
|
19
19
|
def self.paste_streams(streams, options = {})
|
|
20
20
|
options = Misc.add_defaults options, :sep => "\t", :sort => true
|
|
21
|
-
sort, sep, preamble = Misc.process_options options, :sort, :sep, :preamble
|
|
21
|
+
sort, sep, preamble, same_fields = Misc.process_options options, :sort, :sep, :preamble, :same_fields
|
|
22
22
|
|
|
23
23
|
out = Misc.open_pipe do |sin|
|
|
24
24
|
|
|
@@ -67,7 +67,11 @@ module TSV
|
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
key_field = key_fields.compact.first
|
|
70
|
-
|
|
70
|
+
if same_fields
|
|
71
|
+
fields = fields.first
|
|
72
|
+
else
|
|
73
|
+
fields = fields.compact.flatten
|
|
74
|
+
end
|
|
71
75
|
options = options.merge(input_options.first)
|
|
72
76
|
options[:type] = :list if options[:type] == :single
|
|
73
77
|
|
|
@@ -150,13 +154,30 @@ module TSV
|
|
|
150
154
|
end
|
|
151
155
|
end
|
|
152
156
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
157
|
+
if same_fields
|
|
158
|
+
|
|
159
|
+
values = nil
|
|
160
|
+
str.each do |part|
|
|
161
|
+
next if part.nil? or part.empty?
|
|
162
|
+
_p = part.split(sep,-1)
|
|
163
|
+
if values.nil?
|
|
164
|
+
values = _p.collect{|v| [v]}
|
|
165
|
+
else
|
|
166
|
+
_p.each_with_index{|v,i| values[i] << v}
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
values = values.collect{|list| list * "|" } * sep
|
|
171
|
+
|
|
172
|
+
else
|
|
173
|
+
values = str.inject(nil) do |acc,part|
|
|
174
|
+
if acc.nil?
|
|
175
|
+
acc = part.dup
|
|
176
|
+
else
|
|
177
|
+
acc << sep << part
|
|
178
|
+
end
|
|
179
|
+
acc
|
|
158
180
|
end
|
|
159
|
-
acc
|
|
160
181
|
end
|
|
161
182
|
text = [min, values] * sep
|
|
162
183
|
sin.puts text
|
data/lib/rbbt/util/R/model.rb
CHANGED
|
@@ -70,6 +70,19 @@ data = NULL
|
|
|
70
70
|
tsv
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
+
def predict_interval(value, interval='confidence')
|
|
74
|
+
field = formula.split("~").last.strip
|
|
75
|
+
field.gsub!(/log\((.*)\)/,'\1')
|
|
76
|
+
|
|
77
|
+
script = <<-EOF
|
|
78
|
+
model = rbbt.model.load('#{model_file}');
|
|
79
|
+
predict(model, data.frame(#{field} = #{R.ruby2R value}), interval=#{R.ruby2R interval});
|
|
80
|
+
EOF
|
|
81
|
+
|
|
82
|
+
res = R.eval_a script
|
|
83
|
+
Hash[*%w(fit lower upper).zip(res).flatten]
|
|
84
|
+
end
|
|
85
|
+
|
|
73
86
|
def predict(tsv, field = "Prediction")
|
|
74
87
|
case tsv
|
|
75
88
|
when TSV
|
|
@@ -118,8 +118,6 @@ module Misc
|
|
|
118
118
|
def self.hash2md5(hash)
|
|
119
119
|
return "" if hash.nil? or hash.empty?
|
|
120
120
|
|
|
121
|
-
hash = Annotated.purge(hash)
|
|
122
|
-
|
|
123
121
|
str = ""
|
|
124
122
|
keys = hash.keys
|
|
125
123
|
keys = keys.clean_annotations if keys.respond_to? :clean_annotations
|
|
@@ -133,7 +131,11 @@ module Misc
|
|
|
133
131
|
|
|
134
132
|
keys.each do |k|
|
|
135
133
|
next if k == :monitor or k == "monitor" or k == :in_situ_persistence or k == "in_situ_persistence"
|
|
136
|
-
|
|
134
|
+
_v = hash[k]
|
|
135
|
+
_k = k
|
|
136
|
+
v = Annotated.purge(_v)
|
|
137
|
+
k = Annotated.purge(k)
|
|
138
|
+
|
|
137
139
|
case
|
|
138
140
|
when TrueClass === v
|
|
139
141
|
str << k.to_s << "=>true"
|
|
@@ -168,8 +170,8 @@ module Misc
|
|
|
168
170
|
end
|
|
169
171
|
end
|
|
170
172
|
|
|
171
|
-
if defined? Annotated and Annotated ===
|
|
172
|
-
info = Annotated.purge(
|
|
173
|
+
if defined? Annotated and Annotated === _v and not (defined? AssociationItem and AssociationItem === _v)
|
|
174
|
+
info = Annotated.purge(_v.info)
|
|
173
175
|
str << "_" << hash2md5(info)
|
|
174
176
|
end
|
|
175
177
|
end
|
|
@@ -176,6 +176,28 @@ row1 A B C
|
|
|
176
176
|
assert_equal ["AA", "BB", "CC", ""], tsv["row2"]
|
|
177
177
|
end
|
|
178
178
|
|
|
179
|
+
def test_paste_stream_same_field
|
|
180
|
+
text1=<<-EOF
|
|
181
|
+
#: :sep=" "
|
|
182
|
+
#Row LabelA
|
|
183
|
+
row1 A
|
|
184
|
+
row2 AA
|
|
185
|
+
EOF
|
|
186
|
+
|
|
187
|
+
text2=<<-EOF
|
|
188
|
+
#: :sep=" "
|
|
189
|
+
#Row LabelA
|
|
190
|
+
row2 AAA
|
|
191
|
+
EOF
|
|
192
|
+
|
|
193
|
+
s1 = StringIO.new text1
|
|
194
|
+
s2 = StringIO.new text2
|
|
195
|
+
tsv = TSV.open TSV.paste_streams([s1,s2], :sep => " ", :type => :double, :sort => false, :same_fields => true)
|
|
196
|
+
ppp tsv.to_s
|
|
197
|
+
assert_equal "Row", tsv.key_field
|
|
198
|
+
assert_equal ["AA", "AAA"], tsv["row2"][0]
|
|
199
|
+
end
|
|
200
|
+
|
|
179
201
|
def test_flat2double
|
|
180
202
|
text1=<<-EOF
|
|
181
203
|
#: :sep= #:type=:flat
|
|
@@ -109,4 +109,22 @@ data = rbbt.model.inpute(data, CI ~ Dose, method=drm, classes='numeric', fct=LL.
|
|
|
109
109
|
pred = model.predict "Dose" => x
|
|
110
110
|
assert pred > y and pred < y + 4
|
|
111
111
|
end
|
|
112
|
+
|
|
113
|
+
def test_interval
|
|
114
|
+
data = TSV.setup({}, :key_field => "Dose", :fields => ["Response"], :type => :single)
|
|
115
|
+
10.times do
|
|
116
|
+
x = rand(10)
|
|
117
|
+
y = 10 + 3 * x + rand * 4
|
|
118
|
+
data[x] = y
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
model = R::Model.new "Test fit 2", "Response ~ Dose", data, :fit => 'lm'
|
|
122
|
+
|
|
123
|
+
x = 5
|
|
124
|
+
y = 10 + 3 * x
|
|
125
|
+
|
|
126
|
+
pred = model.predict x
|
|
127
|
+
iii model.predict_interval(x)
|
|
128
|
+
assert pred > y and pred < y + 4
|
|
129
|
+
end
|
|
112
130
|
end
|
data/test/rbbt/util/test_open.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rbbt-util
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.17.
|
|
4
|
+
version: 5.17.19
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Miguel Vazquez
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-04-
|
|
11
|
+
date: 2015-04-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|