R's data.table Bits abschneiden?

Also ich bin ein riesigerdata.table fan in R. Ich benutze es fast die ganze Zeit, bin aber auf eine Situation gestoßen, in der es für mich überhaupt nicht funktioniert. Ich habe ein (firmeninternes) Paket, das R's @ verwendedouble, um den Wert einer 64-Bit-Ganzzahl ohne Vorzeichen zu speichern, deren Bitfolge einer ausgefallenen Codierung entspricht. Dieses Paket funktioniert mit Ausnahme von data.table überall sehr gut. Ich habe festgestellt, dass ich eine große Anzahl meiner eindeutigen Werte verliere, wenn ich eine Spalte dieser Daten aggregiere. Ich vermute hier nur, dassdata.table schneidet Bits in irgendeiner Art von seltsamem @ double Optimierung.

Kann jemand bestätigen, dass dies der Fall ist? Ist das einfach ein Bug?

Unten sehen Sie eine Reproduktion des Problems und einen Vergleich mit dem Paket, das ich derzeit verwenden muss, aber mit Leidenschaft vermeiden möchte 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))

Antworten auf die Frage(2)

Ihre Antwort auf die Frage