我正在 R 中寻找一个(简单的)函数来删除重复的元素,比如 unique()duplicated() ,它们可以考虑像 all.equal() 这样的数值的“接近相等”:

unique( c(0, 0))
[1] 0

工作正常,但
unique( c(0, cos(pi/2)) )
[1] 0.000000e+00 6.123032e-17

不删除第二个元素,尽管与 all.equal 的比较返回 TRUE:
all.equal( 0, cos(pi/2) )
[1] TRUE

同样适用于重复:
duplicated( c(0, cos(pi/2)))
[1] FALSE FALSE

有什么建议么?谢谢!

最佳答案

如果您想考虑绝对误差,而不是相对误差(如 all.equal 那样),请尝试:

x <- c(0, cos(pi/2), 1, 1+1e-16)
unique(x)
## [1] 0.000000e+00 6.123234e-17 1.000000e+00
(x <- x[!duplicated(round(x, 10))])
## [1] 0 1

在这里,我们删除了与 w.r.t. 相同的元素。一个固定的(10 位以上)十进制数字。

关于r - unique() 或duplicated() 与 all.equal() 功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23805270/

10-11 15:53