1
minls<- -5.74
maxls<- 1.97
sseq<-seq(minls,maxls,0.5)
which(sseq==-0.24)

其中(sseq==-0.24)给出输出数字(0)

测试序列

 [1] -5.74 -5.24 -4.74 -4.24 -3.74 -3.24 -2.74 -2.24 -1.74 -1.24 -0.74 -0.24  0.26  0.76  1.26  1.76

如您所见,第 12 个元素是 -0.24

简单地通过 c(...) 创建一个数组不会给出这个错误

我在做什么不正确或者这是 which() 函数的问题,是否有任何替代 which()

4

3 回答 3

4

您正面临数值近似问题。

尝试sseq == -0.24sseq+0.24

在那里你会注意到没有一个值sseq是完全正确的-0.24。所以这个问题与 无关which,只是因为计算机不能准确地表示所有数字。

于 2013-03-19T08:38:48.477 回答
3

这可能是由于浮点问题。您可以使用all.equal阈值(tolerance此函数的参数)进行检查。

# tolerance is default - .Machine$double.eps ^ 0.5
chk <- apply(as.matrix(sseq), 1, function(x) {
    ifelse(all.equal(x, -0.24) == "TRUE", TRUE, FALSE)
})
which(chk)
# [1] 12
于 2013-03-19T08:47:17.230 回答
2

与@Arun 回答类似,您也可以这样做

# Change 1e-9 to whatever tolerance suits you best
which(abs(sseq-(-0.24)) < 1e-9)
于 2013-03-19T08:55:44.697 回答