rbbt-util 5.21.115 → 5.21.116
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rbbt/tsv/accessor.rb +20 -4
- data/lib/rbbt/util/R.rb +6 -1
- data/lib/rbbt/util/cmd.rb +5 -4
- data/lib/rbbt/util/misc/format.rb +1 -0
- data/lib/rbbt/util/open.rb +1 -1
- data/lib/rbbt/workflow/step/run.rb +1 -1
- data/share/Rlib/svg.R +1 -1
- data/share/Rlib/util.R +1 -1
- data/test/rbbt/tsv/test_accessor.rb +30 -0
- 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: 77c923c4547ab8c088116d35a69d5963d69c9288
|
4
|
+
data.tar.gz: 1d770671abe5b42e35e7466239f3a20d68c54615
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 435ffaa1be1e204fd0e98c4c7e0f8d3df28dffb79ca1acd0102d32d6078ff2d64d8a27cff3158ec4fd7034b2168b70b44df1cd511be46b582feeb48e95ca08b4
|
7
|
+
data.tar.gz: '08612a841a790fcbd898133e21c47188c905cee765aa8db675464cef651f0c842986249a65192014953451f9fa16cae4c3108360b18f8830c2b7951913b34056'
|
data/lib/rbbt/tsv/accessor.rb
CHANGED
@@ -692,10 +692,14 @@ Example:
|
|
692
692
|
if merge
|
693
693
|
self.through do |key,values|
|
694
694
|
field_values = values[field_pos]
|
695
|
-
|
695
|
+
if delete
|
696
|
+
values = values.dup
|
697
|
+
values.delete_at(field_pos)
|
698
|
+
end
|
696
699
|
next if field_values.nil?
|
697
700
|
zipped = Misc.zip_fields(values)
|
698
701
|
field_values.zip(zipped).each do |field_value,rest|
|
702
|
+
rest = [nil] * values.length if rest.nil?
|
699
703
|
k = [key,field_value]*sep
|
700
704
|
if new.include? k
|
701
705
|
new[k] = Misc.zip_fields(Misc.zip_fields(new[k]) << rest)
|
@@ -712,6 +716,7 @@ Example:
|
|
712
716
|
next if field_values.nil?
|
713
717
|
zipped = Misc.zip_fields(values)
|
714
718
|
field_values.zip(zipped).each do |field_value,rest|
|
719
|
+
rest = [nil] * values.length if rest.nil?
|
715
720
|
k = [key,field_value]*sep
|
716
721
|
new[k] = rest
|
717
722
|
end
|
@@ -730,7 +735,7 @@ Example:
|
|
730
735
|
new
|
731
736
|
end
|
732
737
|
|
733
|
-
def zip(
|
738
|
+
def zip(merge = false, field = "New Field", sep = ":")
|
734
739
|
new = {}
|
735
740
|
self.annotate new
|
736
741
|
|
@@ -740,9 +745,12 @@ Example:
|
|
740
745
|
if merge
|
741
746
|
self.through do |key,values|
|
742
747
|
new_key, new_value = key.split(sep)
|
743
|
-
new_values = values + [[new_value]]
|
748
|
+
new_values = values + [[new_value] * values.first.length]
|
744
749
|
if new.include? new_key
|
745
|
-
|
750
|
+
current = new[new_key]
|
751
|
+
current.each_with_index do |v,i|
|
752
|
+
v.concat(new_values[i])
|
753
|
+
end
|
746
754
|
else
|
747
755
|
new[new_key] = new_values
|
748
756
|
end
|
@@ -763,5 +771,13 @@ Example:
|
|
763
771
|
|
764
772
|
new
|
765
773
|
end
|
774
|
+
|
775
|
+
def remove_duplicates(pivot = 0)
|
776
|
+
new = self.annotate({})
|
777
|
+
self.through do |k,values|
|
778
|
+
new[k] = Misc.zip_fields(Misc.zip_fields(values).uniq)
|
779
|
+
end
|
780
|
+
new
|
781
|
+
end
|
766
782
|
end
|
767
783
|
|
data/lib/rbbt/util/R.rb
CHANGED
@@ -60,8 +60,13 @@ source('#{UTIL}');
|
|
60
60
|
Open.write(init_file) do |f|
|
61
61
|
f.puts "# Loading basic rbbt environment"
|
62
62
|
f.puts "library(utils, quietly=TRUE);\n"
|
63
|
+
f.puts "interactive.script.file = '#{init_file}'"
|
64
|
+
|
63
65
|
f.puts "source('#{R::UTIL}');\n"
|
64
|
-
f.puts
|
66
|
+
f.puts "rbbt.require('readr')"
|
67
|
+
f.puts "interactive.script = read_file(interactive.script.file)"
|
68
|
+
f.puts "cat(interactive.script)"
|
69
|
+
f.puts ""
|
65
70
|
f.puts script
|
66
71
|
end
|
67
72
|
CMD.cmd("env R_PROFILE='#{init_file}' xterm \"$R_HOME/bin/R\"")
|
data/lib/rbbt/util/cmd.rb
CHANGED
@@ -6,6 +6,9 @@ module CMD
|
|
6
6
|
def self.process_cmd_options(options = {})
|
7
7
|
string = ""
|
8
8
|
options.each do |option, value|
|
9
|
+
raise "Invalid option key: #{option.inspect}" if option.to_s !~ /^[a-z_0-9\-=]+$/i
|
10
|
+
raise "Invalid option value: #{value.inspect}" if value.to_s.include? "'"
|
11
|
+
|
9
12
|
case
|
10
13
|
when value.nil? || FalseClass === value
|
11
14
|
next
|
@@ -13,9 +16,9 @@ module CMD
|
|
13
16
|
string << "#{option} "
|
14
17
|
else
|
15
18
|
if option.to_s.chars.to_a.last == "="
|
16
|
-
string << "#{option}#{value} "
|
19
|
+
string << "#{option}'#{value}' "
|
17
20
|
else
|
18
|
-
string << "#{option} #{value} "
|
21
|
+
string << "#{option} '#{value}' "
|
19
22
|
end
|
20
23
|
end
|
21
24
|
end
|
@@ -75,10 +78,8 @@ module CMD
|
|
75
78
|
STDOUT.reopen sout.last
|
76
79
|
sout.last.close
|
77
80
|
|
78
|
-
|
79
81
|
STDOUT.sync = STDERR.sync = true
|
80
82
|
|
81
|
-
|
82
83
|
exec(ENV, cmd)
|
83
84
|
|
84
85
|
exit(-1)
|
data/lib/rbbt/util/open.rb
CHANGED
@@ -50,7 +50,7 @@ module Open
|
|
50
50
|
|
51
51
|
def self.wget(url, options = {})
|
52
52
|
Log.low "WGET:\n -URL: #{ url }\n -OPTIONS: #{options.inspect}"
|
53
|
-
options = Misc.add_defaults options, "--user-agent=" => '
|
53
|
+
options = Misc.add_defaults options, "--user-agent=" => 'rbbt', :pipe => true
|
54
54
|
|
55
55
|
wait(options[:nice], options[:nice_key]) if options[:nice]
|
56
56
|
options.delete(:nice)
|
data/share/Rlib/svg.R
CHANGED
@@ -20,11 +20,11 @@ rbbt.SVG.extract <- function(plot, size=NULL, prefix=NULL, ...){
|
|
20
20
|
resolution = 72 * (size/7)
|
21
21
|
|
22
22
|
if (length(plot$theme) == 0) plot <- plot + theme_gdocs();
|
23
|
+
if (length(plot$theme$text) == 0) plot <- plot + theme(text = element_text(size=base.size));
|
23
24
|
|
24
25
|
plot$theme$text$size = base.size
|
25
26
|
|
26
27
|
print(plot, type='cairo')
|
27
|
-
|
28
28
|
mysvg <- grid.export(res=resolution, prefix=prefix, ...)
|
29
29
|
}
|
30
30
|
|
data/share/Rlib/util.R
CHANGED
@@ -615,7 +615,7 @@ rbbt.plot.matrix <- function(x, ...){
|
|
615
615
|
|
616
616
|
# Adapted from: https://rstudio-pubs-static.s3.amazonaws.com/13301_6641d73cfac741a59c0a851feb99e98b.html
|
617
617
|
rbbt.plot.venn <- function(data, a, ...) {
|
618
|
-
rbbt.require(VennDiagram)
|
618
|
+
rbbt.require('VennDiagram')
|
619
619
|
group.matches <- function(data, fields) {
|
620
620
|
sub = data
|
621
621
|
for (i in 1:length(fields)) {
|
@@ -221,4 +221,34 @@ row2 aa|aa|AA|AA b1|b2|B1|B2 Id1|Id1|Id2|Id2
|
|
221
221
|
assert_equal 6, CMD.cmd('grep -v "#" | cut -f 1', :in => tsv.to_s(nil, false, true)).read.split("\n").length
|
222
222
|
end
|
223
223
|
end
|
224
|
+
|
225
|
+
def test_remove_duplicates
|
226
|
+
content =<<-EOF
|
227
|
+
#Id ValueA ValueB OtherID
|
228
|
+
row1 a|A|a|a b|B|b| Id1|Id2|Id1|Id1
|
229
|
+
row2 aa|aa|AA|AA b1|b2|B1|B2 Id1|Id1|Id2|Id2
|
230
|
+
EOF
|
231
|
+
|
232
|
+
TmpFile.with_file(content) do |filename|
|
233
|
+
tsv = TSV.open(filename, :sep => /\s+/)
|
234
|
+
assert_equal %w(a A a), tsv.remove_duplicates["row1"]["ValueA"]
|
235
|
+
assert tsv.remove_duplicates["row1"]["ValueB"].include?("")
|
236
|
+
end
|
237
|
+
|
238
|
+
end
|
239
|
+
|
240
|
+
def test_unzip_zip
|
241
|
+
content =<<-EOF
|
242
|
+
#Id ValueA ValueB OtherID
|
243
|
+
row1 a|A|a|a b|B|b| Id1|Id2|Id1|Id1
|
244
|
+
row2 aa|aa|AA|AA b1|b2|B1|B2 Id1|Id1|Id2|Id2
|
245
|
+
EOF
|
246
|
+
|
247
|
+
TmpFile.with_file(content) do |filename|
|
248
|
+
tsv = TSV.open(filename, :sep => /\s+/)
|
249
|
+
assert_equal ["b", "b", ""], tsv.unzip("ValueA", true)["row1:a"]["ValueB"]
|
250
|
+
assert_equal ["b", "b", "", "B"].sort, tsv.unzip("ValueA", true).zip(true)["row1"]["ValueB"].sort
|
251
|
+
end
|
252
|
+
|
253
|
+
end
|
224
254
|
end
|
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.21.
|
4
|
+
version: 5.21.116
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|