2013-03-19 2 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

Просто создать массив С (...) не дает эту ошибку

есть ли что-то неправильно, я m) или это проблема с функцией(), есть ли какая-либо альтернатива которой()

ответ

4

Вы столкнулись с проблемами численного приближения.

попробуйте sseq == -0.24 или sseq+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

ага .. умный .. Я сделал 'абс (последовательность) + 0.24' и понял скоро, что он будет также выдавать положительный значения ближе к 0,24. Мне пришлось перейти на «all.equal». (+1). – Arun

Смежные вопросы