Ruby statsample“模式”功能是否正确?

时间:2016-02-29 21:36:54

标签: ruby statistics

Ruby的statiscts gem(Statsample)似乎给出了错误的答案。 模式函数不应该返回数组中最常见的函数吗?例:4

irb(main):185:0> [1,2,3,2,4,4,4,4].to_vector
=>
#<Daru::Vector:34330120 @name = nil @size = 8 >
    nil
  0   1
  1   2
  2   3
  3   2
  4   4
  5   4
  6   4
  7   4

irb(main):186:0> [1,2,3,2,4,4,4,4].to_vector.mode
=> 2

为什么返回 2

ruby 2.1.6p336 (2015-04-13 revision 50298) [x64-mingw32]

statsample (2.0.1)

2 个答案:

答案 0 :(得分:2)

是的,你是对的Victor!向量lib中有一个错误:

[1,2,3,2,4,4,4,4].to_vector
 => 
#<Daru::Vector:70255750869440 @name = nil @size = 8 >
    nil
  0   1
  1   2
  2   3
  3   2
  4   4
  5   4
  6   4
  7   4

[1,2,3,2,4,4,4,4].to_vector.frequencies
 => {1=>1, 2=>2, 3=>1, 4=>4} 
[1,2,3,2,4,4,4,4].to_vector.frequencies.values
 => [1, 2, 1, 4] 

然后获取最大值的索引并从给定索引的基础数组返回值(在您的情况下为第4个位置 - &gt;值2)。这是由method

完成的
    def mode
      freqs = frequencies.values
      @data[freqs.index(freqs.max)]
    end

解决方法

您可以使用此代码来代替mode方法:

[1,2,3,2,4,4,4,4].to_vector.frequencies.max{|a,b| a[1]<=>b[1]}.first
 => 4 

答案 1 :(得分:1)

我同意Jakub的说法。这是daru gem的Vector模块中的mode method中的错误。 statsample中所有与Vector相关的方法现在都基于daru。我已经提交了pull requestdaru修复此错误,希望这将在下一个发布的版本中。