2

我正在尝试按照此处给出的 wilcoxonMatchedPairTest 进行:

import Data.Vector as V
import Statistics.Test.WilcoxonT

sampleA = [1.0,2.0,3.0,4.0,1.0,2.0,3.0,4]
sampleB = [2.0,4.0,5.0,5.0,3.0,4.0,5.0,6]

main = do
    putStrLn "\nResult of wilcoxonMatchedPairTest: "
    print (wilcoxonMatchedPairTest AGreater (Prelude.zip sampleA sampleB))

但是,我收到以下错误:

rnwilcox.hs:10:50: error:
    • Couldn't match expected type ‘Data.Vector.Unboxed.Base.Vector
                                      (a0, a0)’
                  with actual type ‘[(Double, Double)]’
    • In the second argument of ‘wilcoxonMatchedPairTest’, namely
        ‘(Prelude.zip sampleA sampleB)’
      In the first argument of ‘print’, namely
        ‘(wilcoxonMatchedPairTest AGreater (Prelude.zip sampleA sampleB))’
      In a stmt of a 'do' block:
        print
          (wilcoxonMatchedPairTest AGreater (Prelude.zip sampleA sampleB))

显然,我需要在这里拆箱矢量。我尝试使用#如下:

(# Prelude.zip sampleA sampleB #)

但它不起作用。问题出在哪里,如何解决?谢谢你的帮助。

4

1 回答 1

3

您需要将包中的 2 元组列表转换为Vectorwith fromList :: Unbox a => [a] -> Vector ahereData.Vector.Unboxed以创建这样的向量:

import Data.Vector.Unboxed as VU
import Statistics.Test.WilcoxonT

main = do
    putStrLn "\nResult of wilcoxonMatchedPairTest: "
    print (wilcoxonMatchedPairTest AGreater (VU.fromList (Prelude.zip sampleA sampleB)))

或者如果你有两个Vectors,你可以使用zip :: (Unbox a, Unbox b) => Vector a -> Vector b -> Vector (a, b)zip 两个Vectors 到一个Vector项目:

import Data.Vector.Unboxed as VU
import Statistics.Test.WilcoxonT

sampleA = VU.fromList [1.0,2.0,3.0,4.0,1.0,2.0,3.0,4]
sampleB = VU.fromList [2.0,4.0,5.0,5.0,3.0,4.0,5.0,6]

main = do
    putStrLn "\nResult of wilcoxonMatchedPairTest: "
    print (wilcoxonMatchedPairTest AGreater (VU.zip sampleA sampleB))

对于给定的样本数据,这给了我们:

Prelude VU Statistics.Test.WilcoxonT> main

Result of wilcoxonMatchedPairTest: 
Test {testSignificance = mkPValue 1.0, testStatistics = 36.0, testDistribution = ()}
于 2019-09-12T18:36:23.230 回答