R в data.table усекающие биты?

Так что я огромныйdata.table фанат в R. Я использую его почти все время, но столкнулся с ситуацией, в которой он не будет работать для меня вообще. У меня есть пакет (внутренний для моей компании), который использует Rdouble хранить значение беззнакового 64-битного целого числа, чья битовая последовательность соответствует некоторому причудливому кодированию. Этот пакет работает очень хорошо везде, кроме data.table. Я обнаружил, что если я агрегирую по столбцу этих данных, я теряю большое количество своих уникальных значений. Мое единственное предположение здесь, чтоdata.table усекать биты в какой-то странныйdouble оптимизация.

Кто-нибудь может подтвердить, что это так? Это просто ошибка?

Ниже приведена репродукция проблемы и сравнение с пакетом, который я в настоящее время должен использовать, но хочу избежать со страстью (dplyr).

temp <- structure(list(obscure_math = c(6.95476896592629e-309, 6.95476863436446e-309, 
6.95476743245288e-309, 6.95476942182375e-309, 6.95477149408563e-309, 
6.95477132830476e-309, 6.95477132830476e-309, 6.95477149408562e-309, 
6.95477174275702e-309, 6.95476880014538e-309, 6.95476896592647e-309, 
6.95476896592647e-309, 6.95476900737172e-309, 6.95476900737172e-309, 
6.95476946326899e-309, 6.95476958760468e-309, 6.95476958760468e-309, 
6.95477020928318e-309, 6.95477124541406e-309, 6.95476859291965e-309, 
6.95476875870014e-309, 6.95476904881676e-309, 6.95476904881676e-309, 
6.95476904881676e-309, 6.95476909026199e-309, 6.95476909026199e-309, 
6.95476909026199e-309, 6.95476909026199e-309, 6.9547691317072e-309, 
6.9547691317072e-309, 6.9547691317072e-309, 6.9547691317072e-309, 
6.9547691317072e-309, 6.9547691317072e-309, 6.9547691317072e-309, 
6.9547691317072e-309, 6.9547691317072e-309, 6.9547691317072e-309, 
6.9547691317072e-309, 6.9547691317072e-309, 6.95477211576406e-309, 
6.95476880014538e-309, 6.95476880014538e-309, 6.95476880014538e-309, 
6.95476892448104e-309, 6.95476880014538e-309, 6.95476892448105e-309, 
6.9547689659263e-309, 6.95476913170719e-309, 6.95476933893334e-309
)), .Names = "obscure_math", class = c("data.table", "data.frame"), row.names = c(NA, 
-50L))

dt_collapsed <- temp[, .(count=.N), by=obscure_math]
nrow(dt_collapsed) == length(unique(temp$obscure_math))

setDF(temp)
dplyr_collapsed <- temp %>% group_by(obscure_math) %>% summarise(count=n())
nrow(dplyr_collapsed) == length(unique(temp$obscure_math))

Ответы на вопрос(1)

Ваш ответ на вопрос