J'ai écrit deux calculs simples avec Ruby qui correspondent à la façon dont Microsoft Excel calcule les quartiles supérieur et inférieur pour un ensemble donné de données - ce qui n'est pas la même que la méthode généralement acceptée (surprise).calculs percentile rubis pour faire correspondre les formules Excel (refactor besoin)
Ma question est - combien et comment ces méthodes peuvent-elles être refactorisées pour une DRYness maximale?
# 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
Comme Ian le souligne ci-dessous, cette première instruction if devrait être 'return trié [u.truncate-1] si (u-u.truncate) .zero?' – Dave