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

which(sseq==-0.24) は出力数値 (0) を与えます

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(...) で配列を作成するだけでは、このエラーは発生しません

私がやっていることは何か間違っていますか、それともこれは which() 関数の問題ですか? which() に代わるものはありますか?

4

3 に答える 3

4

数値近似の問題に直面しています。

sseq == -0.24またはを試してくださいsseq+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 answer と同様に、次のこともできます

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