带有 fst 的 bit64 整数
bit64 integers with fst
我在包含长整数的 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.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
Matt 完全正确,fst
目前没有序列化任何列属性。不过它将在下一个版本中出现,几周后到期。届时,还将支持 类,例如 Date
和 POSIXt
。然而,支持自定义属性将是一个挑战,因为 fst
提供对数据的随机访问,并且某些属性在子设置时被修改(例如时间序列)。
我在包含长整数的 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.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
Matt 完全正确,fst
目前没有序列化任何列属性。不过它将在下一个版本中出现,几周后到期。届时,还将支持 类,例如 Date
和 POSIXt
。然而,支持自定义属性将是一个挑战,因为 fst
提供对数据的随机访问,并且某些属性在子设置时被修改(例如时间序列)。