比较R中的两个数值变量

时间:2016-01-15 21:39:57

标签: r

我已经运行了R函数stl()函数并使用其生成的残差进行grubbs测试。代码如下:

stl.res = stl(dataset, s.windows='periodic')
residuals = as.numeric(strl.res$time.series[, "remainder"])
grubbs.result = grubbs.test(residuals)

strsplit(grubbs.result$alternative," ")[[1]][3]
## [1] "38.4000349179783"

outlier = as.numeric(strsplit(grubbs.result$alternative," ")[[1]][3])
outlier
## [1] 38.40003492

which(residuals == outlier)
## integer(0)

我的问题是为什么which()的返回值为0.实际上residuals[1920] = 38.4000349179783。所以which()的调用应返回值为1921而不是0.我猜这是一个精度问题。我尝试了很多方法,但没有设法解决它。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

如果它确实是一个精确的问题(可能是R FAQ 7.31),那么有各种方法来解决它。

# this is an approximation of your test
x <- c(1, 2, 38.4000349179783, 4, 5)
y <- 38.40003492

> x == y
[1] FALSE FALSE FALSE FALSE FALSE
# so which doesn't return anything


# one basic approach

> which(abs(x - y) < .00001)
[1] 3

您还可以使用all.equal()进行操作,但检查差异小于预先选择的限制可能是最简单的。

答案 1 :(得分:0)

也许您可以按以下方式使用isTrue()all.equal()

which(sapply(residuals, function(v) isTrue(all.equal(v,outlier))) == T)