2016-08-17 10 views

答えて

0

数字に変換すると情報が失われませんでした。 options("digits")を参照してください。それは単なる印刷問題です。 options(digits = 20)を設定して、1469533935218と入力してください。

あなたは(サフィックスLあなたがintegerではなくdoubleをしたいRを伝えます)コンソールで1469533935218Lを入力すると、あなたが得る:

[1] 1.469534e+12 
Warning message: 
non-integer value 1469533935218L qualified with L; using numeric value 

、整数は32ビットモードで表現することができませんので。 ?integerの「詳細」セクションが与える:

Integer vectors exist so that data can be passed to C or Fortran 
code which expects them, and so that (small) integer data can be 
represented exactly and compactly. 

Note that current implementations of R use 32-bit integers for 
integer vectors, so the range of representable integers is 
restricted to about +/-2*10^9: ‘double’s can hold much larger 
integers exactly. 

非常に最後の文も何も精度が失われないことを示しています。


あなたは整数として1469533935218を保持したい場合は、限り、あなたは、64ビットのRで64ビットマシン上にあるしかし、私の気持ちがあるとして、64ビット表現を使用してakrunの提案@必要そうする必要はないということです。

また、ストレージコストも考慮する必要があります。データをdoubleのままにしておくと、各番号は32ビットのままです。 64ビット整数としてデータを保持すると、メモリ使用量が2倍になります。実際に、それらの数値で後で浮動小数点計算を実行する場合は、doubleモードでそれらを必要とします。なぜdoubleを使用しないのですか?

0

私たちは、大きな整数を持つ列を持つデータセットを読み取る必要がある場合には、再現性の例

fread

library(bit64) 
library(data.table) 
dt1 <- fread("yourfile.csv") 

を使用するか、使用する前にbit64をロード

dt2 <- fread(" 
     1469533935218,1469533935219 
     14695339352223,1469533935323 
    ") 
dt2 
#    V1   V2 
#1: 1469533935218 1469533935219 
#2: 14695339352223 1469533935323 
+0

正しく読み込むために 'fread'のために' library(bit64) 'を呼び出す必要はありませんが、それは実際には –

+0

の方がよいでしょう。 docsから: "integer64"(デフォルト)は、2^31より大きい整数を含むものとして検出された列を、bit64 :: integer64のように読み込みます。 –

+0

@docendodiscimus大きなトランザクションデータセットを 'fread'で読み込みました。 idsは非常に長い整数です。私はそれが正しく拾うだろうと思ったが、私は二重引用符を確認すると、いくつかの問題があった。だから、もう一度 'bit64'で読んで解決しました。 – akrun

関連する問題