2017-07-10 3 views
1

Les nombres originaux sont des entiers de 825010211307012 à 825010304926185. fread() transforme tous ces nombres en 4.076092e-309.fread() lit un grand nombre comme 4.076092e-309

read.table fonctionne normalement, mais j'ai besoin de lire des données volumineuses, donc je ne peux pas l'utiliser.

Comment puis-je corriger cette erreur?

+0

connexes: https://stackoverflow.com/questions/44973544/data-tablefread-silently-corrupts-long-integers – Scarabee

+0

Notez que la question Github est ici: https: //github.com/Rdatatable/data.table/issues/2250 – Scarabee

+0

@Scarabee IMHO, https://github.com/Rdatatable/data.table/issues/2250 n'est pas pertinent ici car il traite des entiers plus grands> 2^63 qui ne peut pas être géré par le paquet 'bit 64'. Voir aussi https://github.com/Rdatatable/data.table/issues/1618 et http://stackoverflow.com/questions/32339636/long- numbers-as-a-character-string – Uwe

Répondre

3

Si vous installez le package bit64 puis fread utilisera pour lire ces grands entiers:

avant:

> fread("./bignums.txt") 
       V1 
1: 4.076092e-309 
2: 4.076092e-309 

Est-ce que la magie:

> install.packages("bit64") 

Puis:

> fread("./bignums.txt") 
       V1 
1: 825010211307012 
2: 825010304926185 

fread les a lu dans les entiers 64 bits:

> fread("./bignums.txt")$V1 
integer64 
[1] 825010211307012 825010304926185 

Je ne sais pas pourquoi fread eux quand les erreurs de lecture bit64 ne sont pas disponibles. J'attends au moins un avertissement ...

+2

Selon https://github.com/Rdatatable/data.table/blob/master/NEWS.md, cela a été corrigé dans la version de développement 1.10.5: _When fread() et print() voir les colonnes integer64 sont présentes mais le paquet bit64 n'est pas installé, l'avertissement est maintenant affiché comme prévu. – Uwe