2013-03-19 179 views
1
minls<- -5.74 
maxls<- 1.97 
sseq<-seq(minls,maxls,0.5) 
which(sseq==-0.24) 

其中(SSEQ == - 0.24)给出输出数字(0)错误与R,它()

为了测试 SSEQ

[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(...)的数组并没有给这个错误

有什么不正确我一个(或)这是一个与哪个()函数的问题,是否有任何替代哪个()

回答

4

您正面临数值近似问题。

尝试sseq == -0.24sseq+0.24

在那里您会注意到sseq中的值都不是-0.24。所以这个问题与which无关,只是因为计算机无法准确表示所有数字。

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 
2

类似于@Arun答案,你也可以做

# Change 1e-9 to whatever tolerance suits you best 
which(abs(sseq-(-0.24)) < 1e-9) 
+0

啊哈..聪明..我做了'ABS(SEQ)+ 0.24'并很快意识到,它也将给出正面值接近0.24。我不得不改成all.equal。 (+1)。 – Arun 2013-03-19 09:12:42