【问题标题】:R rounds decimal values in matrix when subsettingR在子集时舍入矩阵中的十进制值
【发布时间】:2015-09-03 10:31:17
【问题描述】:

我对 R 中的子集有疑问。假设我有以下矩阵:

     Ch1.Amplitude Ch2.Amplitude
[1,]      6968.577      9637.309
[2,]     11903.564     11385.656
[3,]     13503.292      9928.314

     Ch1.Amplitude Ch2.Amplitude
[1,]     11903.564     11385.656
[2,]      2519.582      8042.450
[3,]      9878.749      5899.139

我想将第一个矩阵 A 的第 2 行与第二个矩阵 B 中的第 1 行相匹配。但是,当我访问该行时

matrixA[2, , drop=F]

这是我得到的:

     Ch1.Amplitude Ch2.Amplitude
[1,]      11903.56      11385.66

如您所见,小数点后的第三个数字已被砍掉!所以很自然,如果我使用 match() 来查找矩阵 B 中的行,它将返回 NA。 但是,当我查询多行时,不会发生这种情况。

MatrixA[c(1,2),]
     Ch1.Amplitude Ch2.Amplitude
[1,]      6968.577      9637.309
[2,]     11903.564     11385.656

所以我想它与 drop=F 有关。发生了什么,我该如何避免?

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    其实这里并没有错。这只是一个格式问题。您可以轻松检查值是否不受影响:

    > identical(matrixA[2, , drop=F], matrix(c(11903.564, 11385.656), nrow=1)
    [1] TRUE
    

    如果想查看更多小数位,例如可以使用 options(digits):

    > options(digits=10)
    > matrixA[2, , drop=F]
          [,1]      [,2]
    [1,] 11903.564 11385.656
    

    或格式:

    > format(matrixA[2, , drop=F], nsmall=3)
         [,1]        [,2]       
    [1,] "11903.564" "11385.656"
    

    【讨论】:

    • 谢谢,我早该想到的!我猜我的 match() 出于另一个原因返回 NA...
    • 嗯,在处理浮点数时依赖相等性通常是个坏主意。
    • 嗯,我明白了。您对如何比较行有更好的了解吗?
    • 如果你想比较行,我会检查norm的行差异是否接近于零。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多