“table”是否对数值进行四舍五入?

Sté*_*ent 6 r

我的矩阵points(120 x 2) 有 120 个向量。我计算了它们的平方范数:

norms2 <- apply(points, 1L, crossprod)
Run Code Online (Sandbox Code Playgroud)

我将这些平方范数制成表格:

> table(norms2)
norms2
0.410691055416468  1.62481505182984  2.37518494817016  3.58930894458353 
               30                30                30                30 
Run Code Online (Sandbox Code Playgroud)

我们可以看到范数平方有四个可能的值,每个值有 30 个向量。

我提取具有最小平方范数的向量:

> points[norms2 == min(norms2), ]
            [,1]       [,2]
[1,]  0.06698726 -0.6373412
[2,]  0.06698726  0.6373412
[3,] -0.06698726 -0.6373412
[4,] -0.06698726  0.6373412
Run Code Online (Sandbox Code Playgroud)

为什么我只得到 4 个向量,而不是 30 个?

如果我用近似等式进行提取,我会得到 30 个向量:

> dim(points[abs(norms2 - min(norms2)) < 0.001, ])
[1] 30  2
Run Code Online (Sandbox Code Playgroud)

那么解释是什么呢?是否对table值进行四舍五入?

Gre*_*gor 5

是的,table可以对数字输入进行四舍五入。

table()调用factor()as.character()as.character()进行一些舍入:

x = sqrt(2)
print(x, digits = 22)
# [1] 1.414213562373095145475
as.character(x)
# [1] "1.4142135623731"
Run Code Online (Sandbox Code Playgroud)

这是一个可重现的示例:

x = c(pi, pi + 1e-15)

x == pi
# [1]  TRUE FALSE

as.character(x)
# [1] "3.14159265358979" "3.14159265358979"

table(x)
# x
# 3.14159265358979 
#                2 
Run Code Online (Sandbox Code Playgroud)