我遇到了函數seq
的某種奇怪的(或者僅僅是沒有預期的)行爲。 創建簡單序列時,某些值無法與==運算符正確匹配。 看到這個小例子:seq和==運算符的神祕行爲。一個精確的問題?
my.seq <- seq(0, 0.4, len = 5)
table(my.seq) # ok! returns 0 0.1 0.2 0.3 0.4
# 1 1 1 1 1
which(my.seq == 0.2) # ok! returns 3
which(my.seq == 0.3) # !!! returns integer(0)
當手動創建我的序列,它似乎工作,雖然:
my.seq2 <- c(0.00, 0.10, 0.20, 0.30, 0.40)
which(my.seq2 == 0.3) # ok! returns 4
你有任何的解釋?我通過使用which(round(my.seq, 2) == 0.3)
解決了這個問題,但我會對導致問題的原因感興趣。
預先感謝您的意見。
請參閱'?'==''的文檔,特別是標題爲「注意」的部分。 – joran 2012-07-31 14:43:44
謝謝。我只是沒有意識到在這種簡單的情況下可能會有任何問題,但是'seq'會做一些計算,所以就是這樣。那麼,下一次使用'round'時我一定會更加小心嗎? (我的意思是將'isTRUE(all.equal(x,0.3))'應用到序列中會有點矯枉過正,不是嗎?) – Stefan 2012-07-31 15:15:16
是否過度殺毒取決於你有多少錯誤在你的代碼中確定。 – joran 2012-07-31 16:37:44