Module: GeneValidator::ExtraArrayMethods

Included in:
Array
Defined in:
lib/genevalidator/ext/array.rb

Overview

extention of the Array Class (i.e new methods for vectors)

Instance Method Summary collapse

Instance Method Details

#all_quartilesObject



33
34
35
36
37
38
39
40
41
42
# File 'lib/genevalidator/ext/array.rb', line 33

def all_quartiles
  sorted = sort
  len    = sorted.length
  split  = sorted.median_split
  [
    split[0].median(true),
    sorted.median(true),
    split[1].median(true)
  ]
end

#meanObject



8
9
10
# File 'lib/genevalidator/ext/array.rb', line 8

def mean
  sum / length.to_f
end

#median(already_sorted = false) ⇒ Object



12
13
14
15
16
# File 'lib/genevalidator/ext/array.rb', line 12

def median(already_sorted = false)
  sorted = already_sorted ? self : sort
  len    = sorted.length
  (sorted[(len - 1) / 2] + sorted[len / 2]) / 2.0
end

#median_splitObject



44
45
46
47
48
# File 'lib/genevalidator/ext/array.rb', line 44

def median_split
  len    = length
  center = len % 2
  [self[0..len / 2 - 1], self[len / 2 + center..-1]]
end

#modeObject



18
19
20
21
# File 'lib/genevalidator/ext/array.rb', line 18

def mode
  freq = each_with_object(Hash.new(0)) { |v, h| h[v] += 1; }
  max_by { |v| freq[v] }
end

#sample_varianceObject



23
24
25
26
27
# File 'lib/genevalidator/ext/array.rb', line 23

def sample_variance
  m   = mean
  sum = inject(0) { |accum, i| accum + (i - m)**2 }
  sum / (length - 1).to_f
end

#standard_deviationObject



29
30
31
# File 'lib/genevalidator/ext/array.rb', line 29

def standard_deviation
  Math.sqrt(sample_variance)
end

#sumObject



4
5
6
# File 'lib/genevalidator/ext/array.rb', line 4

def sum
  inject(0) { |accum, i| accum + i }
end