Sonderbarer Fehler in R beim Importieren von (64-Bit-) Ganzzahlen mit vielen Ziffern

8

Ich importiere eine CSV, die eine einzelne Spalte enthält, die sehr lange Ganzzahlen enthält (zum Beispiel: 2121020101132507598)

  

a & lt; -read.csv ('temp.csv', as.is = T)

Wenn ich diese Ganzzahlen als Zeichenfolgen importiere, kommen sie richtig durch, aber wenn sie als Ganzzahlen importiert werden, werden die letzten Ziffern geändert. Ich habe keine Ahnung, was vor sich geht ...

  

1 "4031320121153001444" 4031320121153001472
  2 "4113020071082679601" 4113020071082679808
  3 "4073020091116779570" 4073020091116779520
  4 "2081720101128577687" 2081720101128577792
  5 "4041720081087539887" 4041720081087539712
  6 "4011120071074301496" 4011120071074301440
  7 "4021520051054304372" 4021520051054304256
  8 "4082520061068996911" 4082520061068997120
  9 "4082620101129165548" 4082620101129165312

    
Zubin 11.07.2012, 20:34
quelle

4 Antworten

11

Wie andere bemerkt haben, können Sie keine so großen ganzen Zahlen darstellen. Aber R liest diese Werte nicht in Ganzzahlen, sondern liest sie in Zahlen mit doppelter Genauigkeit.

Doppelte Genauigkeit kann Zahlen nur bis zu ~ 16 Stellen genau darstellen, weshalb Sie Ihre Zahlen nach 16 Stellen gerundet sehen. Siehe gmp , Rmpfr und int64 Pakete für mögliche Lösungen. Obwohl ich in keinem von ihnen eine Funktion zum Lesen von einer Datei sehe, könntest du vielleicht etwas kochen, indem du ihre Quellen ansiehst.

UPDATE: So können Sie Ihre Datei in ein int64 -Objekt bringen:

%Vor%     
Joshua Ulrich 11.07.2012, 21:02
quelle
7

Rs maximaler intger Wert ist ungefähr 2E9. Wie @Joshua in einer anderen Antwort erwähnt, ist eine der möglichen Lösungen das int64-Paket.

Importieren Sie stattdessen die Werte als Zeichen. Dann konvertieren Sie zu int64 .

%Vor%     
Seth 11.07.2012 21:13
quelle
4

Sie können einfach keine so großen Zahlen darstellen. Siehe

%Vor%

was auf meiner Box steht

%Vor%     
Dirk Eddelbuettel 11.07.2012 20:35
quelle
3

Der maximale Wert einer 32-Bit-Ganzzahl mit Vorzeichen beträgt 2.147.483.647. Ihre Zahlen sind viel größer.

Versuchen Sie stattdessen, sie als Gleitkommawerte zu importieren.

There4 sind ein paar Einschränkungen zu beachten, wenn es um Gleitkommaarithmetik in R oder einer anderen Sprache geht:

Ссылка

Ссылка

Ссылка

    
Eric J. 11.07.2012 20:37
quelle

Tags und Links