class ABAnalyzer::Matrix
Attributes
columns[R]
rows[R]
Public Class Methods
new(values)
click to toggle source
# File lib/abanalyzer/matrix.rb, line 4 def initialize(values) @values = values @columns = values.keys @rows = values[@columns.first].keys validate end
Public Instance Methods
column_sum(name)
click to toggle source
# File lib/abanalyzer/matrix.rb, line 44 def column_sum(name) get_column(name).inject { |a, b| a + b } end
each_cell() { |colname, rowname, get(colname, rowname)| ... }
click to toggle source
# File lib/abanalyzer/matrix.rb, line 32 def each_cell @columns.each do |colname| @rows.each do |rowname| yield colname, rowname, get(colname, rowname) end end end
get(colname, rowname)
click to toggle source
# File lib/abanalyzer/matrix.rb, line 40 def get(colname, rowname) @values[colname][rowname] end
get_column(name)
click to toggle source
# File lib/abanalyzer/matrix.rb, line 22 def get_column(name) @values[name].values end
get_row(name)
click to toggle source
# File lib/abanalyzer/matrix.rb, line 26 def get_row(name) @values.map do |_colname, rows| rows[name] end end
row_sum(name)
click to toggle source
# File lib/abanalyzer/matrix.rb, line 48 def row_sum(name) get_row(name).inject { |a, b| a + b } end
total_sum()
click to toggle source
# File lib/abanalyzer/matrix.rb, line 52 def total_sum @columns.map { |col| column_sum(col) }.inject { |a, b| a + b } end
validate()
click to toggle source
# File lib/abanalyzer/matrix.rb, line 11 def validate @values.each do |colname, column| if column.keys.map(&:to_s).sort != @rows.map(&:to_s).sort raise MatrixFormatError, "Column #{colname} has row names that don't match the first column's." end end coltotal = @columns.map { |col| column_sum(col) }.inject { |a, b| a + b } rowtotal = @rows.map { |col| row_sum(col) }.inject { |a, b| a + b } raise MatrixFormatError, 'Column sums do not equal row sums' if coltotal != rowtotal end