【问题标题】:bit64 integers with fst带 fst 的 bit64 整数
【发布时间】:2017-02-21 23:32:37
【问题描述】:

我在一个包含长整数的 csv 中有数据。我正在 csvs 和 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 整数的data.tables

【问题讨论】:

标签: r data.table bit64


【解决方案1】:

看起来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

【讨论】:

    【解决方案2】:

    Matt 是绝对正确的,fst 目前没有序列化任何列属性。不过,它将在下一个版本中,这将在几周后到期。届时,还将支持DatePOSIXt 等类。然而,支持自定义属性将是一个挑战,因为fst 提供对数据的随机访问,并且某些属性会在子设置时被修改(例如考虑时间序列)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多