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)
答案 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 request到daru修复此错误,希望这将在下一个发布的版本中。