40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/rbbt/matrix.rb', line 40
def subsets
@subsets ||= begin
subsets = {}
case @labels
when Path
if @labels.exists?
labels = @labels.tsv
factors = labels.fields
labels.through do |sample,values|
factors.zip(values).each do |factor,value|
subsets[factor] ||= {}
subsets[factor][value] ||= []
subsets[factor][value] << sample
end
end
end
when TSV
factors = @labels.fields
@labels.through do |sample,values|
factors.zip(values).each do |factor,value|
subsets[factor] ||= {}
subsets[factor][value] ||= []
subsets[factor][value] << sample
end
end
when Hash
@labels.each do |factor,info|
subsets[factors] ||= {}
info.each do |value, samples|
subsets[factors][value] = case samples
when Array
samples
when String
samples.split ','
else
raise "Format of samples not understood: #{Misc.finguerprint samples}"
end
end
end
end
clean_subsets = {}
subsets.each do |factor,values|
next if values.nil? or values.size < 2
values.each do |level,samples|
next if samples.nil? or samples.length < 2
clean_subsets[factor] ||= {}
clean_subsets[factor][level] = samples
end
end
clean_subsets
end
end
|