Module: RunKit::CoreExt::Enumerable

Defined in:
lib/run_kit/core_ext.rb

Instance Method Summary collapse

Instance Method Details

#meanObject

one-liners



30
# File 'lib/run_kit/core_ext.rb', line 30

def mean = empty? ? nil : sum(0.0) / length

#stddev(sample: true) ⇒ Object



31
# File 'lib/run_kit/core_ext.rb', line 31

def stddev(sample: true) = variance(sample:)&.sqrt

#tally_sortedObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/run_kit/core_ext.rb', line 4

def tally_sorted
  keyfn = case find { _1 }
  when ::String then -> { _1&.downcase || "\uffff" }
  when ::Numeric then -> { _1 || Float::MAX }
  when ::Array then -> { _1 || [] }
  when TrueClass, FalseClass then -> { (_1 != nil) ? (_1 ? 0 : 1) : Float::MAX }
  end

  unsorted = tally
  begin
    unsorted.sort_by { [-_2, keyfn&.call(_1)] }
  rescue ArgumentError, NoMethodError
    keyfn = nil # mixed types, don't sort on key
    retry
  end.to_h
end

#variance(sample: true) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/run_kit/core_ext.rb', line 21

def variance(sample: true)
  n = length
  return if (sample && n < 2) || (!sample && n.zero?)
  mu = mean
  denom = sample ? (n - 1) : n
  sum(0.0) { (_1 - mu)**2 } / denom
end