我已经用Ruby编写了两个简单的计算,它们与Microsoft Excel计算给定数据集的上下四分位数的方式相匹配 - 这不同于普遍接受的方法(意外)。红宝石百分比计算匹配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
正如Ian指出的那样,如果(u-u.truncate).zero?'那么第一个if语句应该是'return sorted [u.truncate-1] – Dave 2011-07-13 08:40:32