我正在尝试编写一个加载 2 个文本文件的程序,将这些文件中的数字转换为 2 个列表,然后计算这些列表之间的 pearson 相关性。
pearson 函数只能接受浮点数,所以我制作了一个名为 floatconvert 的函数来尝试解决这个问题,但它没有。我收到一条错误消息,提示“无法将预期类型 'IO b0' 与实际类型 'Float' 匹配。” 在‘pearson’的第一个参数中,即‘input1.’”
任何解决此问题的帮助将不胜感激。
main = do
input1file <- readFile "input1.txt"
input2file <- readFile "input2.txt"
let input1 = floatconvert input1file
let input2 = floatconvert input2file
pearson input1 input2
floatconvert x = [ read a::Float | a <- words x ]
pearson xs ys = (psum-(sumX*sumY/n))/(sqrt((sumXsq-(sumX**2/n)) * (sumYsq-(sumY**2/n))))
where
n = fromIntegral (length xs)
sumX = sum xs
sumY = sum ys
sumXsq = sum([ valX*valX | valX <- xs ])
sumYsq = sum([ valY*valY | valY <- ys ])
psum = sum([ fst val * snd val | val <- zip xs ys ])