Method: Matrix#subsets

Defined in:
lib/rbbt/matrix.rb

#subsetsObject



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