2017-02-21 18 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 файлы для data.table с содержащими bit64 целыми числами

+3

Полагает, что вы должны жаловаться на сопровождающего. –

+2

Подано: https://github.com/fstpackage/fst/issues/28 – Hugh

ответ

5

Похожи 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 в настоящее время не сериализации атрибуты любого столбца. Это будет в следующей версии, хотя, как ожидается, через несколько недель. В этот момент также будут поддерживаться такие классы, как Date и POSIXt. Однако поддержка пользовательских атрибутов будет проблемой, потому что fst обеспечивает произвольный доступ к данным, а некоторые атрибуты изменяются при подстановке (например, временные ряды).