2013-06-06 3 views
3

Я хочу, чтобы все различных значения с плавающей точкой в ​​образце:Получить точные значения поплавков в R?

unique(c(0.100000000002, 0.100000000003)) 

Но это возвращает только два раз 0.1, которые не являются уникальным значением:

[1] 0.1 0.1 

Как я могу перечислить точные значения, спасен?

ответ

5

Это только предел печати R по умолчанию 7 значащих цифр. Для того, чтобы увидеть истинные ценности, лежащие в основе:

print(unique(c(0.100000000002, 0.100000000003), digits=15) 

Чтобы изменить поведение по умолчанию, см ?options; вы хотите что-то вроде options(digits=15).

5

Использование sprintf ...

x <- unique(c(0.100000000002, 0.100000000003)) 
sprintf("%.20f", x) 
#[1] "0.10000000000200000294" "0.10000000000299999470" 

Из help page для sprintf ...

е
двойной точности значение, в «неподвижной точки» десятичная запись формы «[ -] mmm.ddd». Число знаков после запятой («d») определяется значением : по умолчанию 6; точность 0 подавляет десятичную точку . Не конечные значения преобразуются в NA, NaN или (возможно, с последующим знаком) Inf.

2

Держи

options(digits=14) 
    unique(c(0.100000000002, 0.100000000003)) 
+1

Это то же самое, как ответ @HongOoi «s и, следовательно, дублируется информация. –

+1

Да. Я прошу прощения. Я не читал его ответа до публикации. – Avinash