2017-02-21 21 views
4

長い整数を含むcsvにデータがあります。私はcsvsファイルとfstファイルの間でこのデータを交換しています。ビット64の整数とfst

例えば、

library(bit64) 
library(data.table) 
library(fst) 
library(magrittr) 

# Prepare example csvs 
DT64_orig <- data.table(x = (c(2345612345679, 1234567890, 8714567890))) 
fwrite(DT64_orig, "DT64_orig.csv") 

# Read and move to fst 
DT64 <- fread("DT64_orig.csv") 
write.fst(DT64, "DT64_fst.fst") 

DT_fst2 <- 
    read.fst("DT64_fst.fst") %>% 
    setDT 

# bit64 integers not preserved: 
identical(DT_fst2, DT64) 

fstは、いずれかの属性を保存またはロードするときに(と質問してください列をドロップする可能性があるように見えますbit64整数

+3

あなたはfstのメンテナーに不平を言っているはずです。 –

+2

提出:https://github.com/fstpackage/fst/issues/28 – Hugh

答えて

5

を含むdata.tableのためfstファイルを使用する方法はありますパッケージfstに関する問題)。その間に列タイプを自分自身に戻すことができます。 bit64::integer64はフードの下にプレーンなdoubleなので、ビットは失われません。 Rに列を印刷する方法を伝えるタイプ情報。

> DT_fst2 
       x 
1: 1.158886e-311 
2: 6.099576e-315 
3: 4.305569e-314 
> setattr(DT_fst2$x, "class", "integer64") 
> DT_fst2 
       x 
1: 2345612345679 
2: 1234567890 
3: 8714567890 
> identical(DT_fst2, DT64) 
[1] TRUE 
3

マットはfstは現在、任意の列の属性をシリアル化されていない、絶対的に正しいです。それは次のバージョンでは、数週間で予定されています。その時点で、DatePOSIXtなどのクラスもサポートされます。しかし、fstはデータへのランダムアクセスを提供し、一部の属性はサブ設定時に変更されるため(例:時系列を考える)、カスタム属性をサポートすることは難しい問題です。

関連する問題