如何重新计算矩阵以获得正确的值?

How to recalculate a matrix to get correct values?

我在 data.frame (54x54) 中有相似矩阵,下面是

的一部分
        k2m1    k2m2    k3m1    k3m2    k3m3    k4m1    k4m2    k4m3    k4m4    k5m1    k5m2    k5m3    k5m4    k5m5    k6m1    k6m2
k2m1 1.00000 0.70593 0.98712 0.67291 0.84659 0.83849 0.69555 0.94776 0.29571 0.83640 0.78021 0.78101 0.80930 0.29568 0.90375 0.66605
k2m2 0.70593 1.00000 0.62491 0.99506 0.93949 0.88436 0.97591 0.55784 0.44880 0.88685 0.94409 0.93483 0.35098 0.44874 0.75674 0.96503
k3m1 0.98712 0.62491 1.00000 0.58903 0.77023 0.76720 0.61293 0.97078 0.26117 0.76834 0.70287 0.70255 0.87783 0.26114 0.85845 0.58731
k3m2 0.67291 0.99506 0.58903 1.00000 0.91326 0.87418 0.98249 0.51427 0.44762 0.85752 0.94062 0.93468 0.31851 0.44756 0.71141 0.97317
k3m3 0.84659 0.93949 0.77023 0.91326 1.00000 0.93244 0.91640 0.71039 0.41196 0.96470 0.93509 0.92326 0.48356 0.41191 0.90513 0.88415
k4m1 0.83849 0.88436 0.76720 0.87418 0.93244 1.00000 0.87680 0.65148 0.35668 0.89307 0.95398 0.93431 0.48784 0.35664 0.80183 0.85987

当我将它转换为距离矩阵时:

df <- 1 - df

我得到一些 1-1 减法为“0”,但有些是“2.2204e-16”,见下文:

         k2m1       k2m2       k3m1      k3m2     k3m3     k4m1     k4m2     k4m3    k4m4     k5m1     k5m2     k5m3    k5m4    k5m5
k2m1 0.000000 2.9407e-01 1.2878e-02 0.3270884 0.153409 0.161507 0.304450 0.052237 0.70429 0.163605 0.219794 0.218985 0.19070 0.70432
k2m2 0.294070 2.2204e-16 3.7509e-01 0.0049388 0.060515 0.115635 0.024087 0.442162 0.55120 0.113154 0.055910 0.065169 0.64902 0.55126
k3m1 0.012878 3.7509e-01 1.1102e-16 0.4109739 0.229773 0.232802 0.387071 0.029223 0.73883 0.231656 0.297130 0.297452 0.12217 0.73886
k3m2 0.327088 4.9388e-03 4.1097e-01 0.0000000 0.086735 0.125816 0.017506 0.485726 0.55238 0.142484 0.059376 0.065321 0.68149 0.55244
k3m3 0.153409 6.0515e-02 2.2977e-01 0.0867352 0.000000 0.067559 0.083599 0.289610 0.58804 0.035305 0.064912 0.076741 0.51644 0.58809
k4m1 0.161507 1.1564e-01 2.3280e-01 0.1258165 0.067559 0.000000 0.123199 0.348521 0.64332 0.106927 0.046022 0.065694 0.51216 0.64336

我知道它的价值真的很低,但我觉得不应该是这样。如何获得正确的价值观?

尝试将以下行添加到您的代码中

df <- `diag<-`(df, 0)

replace(df, df <= sqrt(.Machine$double.eps), 0)