Я написал два простых расчета с Ruby, которые соответствуют тому, как Microsoft Excel вычисляет верхний и нижний квартили для заданного набора данных - это не то же самое, что общепринятый способ (удивление).Расчет Ruby Percentile в соответствии с формулами Excel (нужен рефакторинг)
Мой вопрос - насколько и как лучше всего эти методы можно реорганизовать для максимальной СУХОЙ?
# Return an upper quartile value on the same basis as Microsoft Excel (Freund+Perles method) def excel_upper_quartile(array) return nil if array.empty? sorted_array = array.sort u = (0.25*(3*sorted_array.length+1)) if (u-u.truncate).is_a?(Integer) return sorted_array[(u-u.truncate)-1] else sample = sorted_array[u.truncate.abs-1] sample1 = sorted_array[(u.truncate.abs)] return sample+((sample1-sample)*(u-u.truncate)) end end # Return a lower quartile value on the same basis as Microsoft Excel (Freund+Perles method) def excel_lower_quartile(array) return nil if array.empty? sorted_array = array.sort u = (0.25*(sorted_array.length+3)) if (u-u.truncate).is_a?(Integer) return sorted_array[(u-u.truncate)-1] else sample = sorted_array[u.truncate.abs-1] sample1 = sorted_array[(u.truncate.abs)] return sample+((sample1-sample)*(u-u.truncate)) end end
Как показано ниже, первый оператор if должен быть 'return sorted [u.truncate-1], если (u-u.truncate) .zero?' – Dave