我的矩阵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值进行四舍五入?
是的,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)