我正在 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/