4

我正在尝试加载,integer64因为表明该参数未实现但已实现。虽然 fread 一直加载为.characterfread ?freadinteger64options(datatable.integer64)int64

我怎么知道fread加载为character. 编辑[如果colClasses是答案,我认为它不允许指定单个列名或索引,并且我加载的表有几十列,所以不切实际... => 这是错误的]

这是一个示例

#for int 64
library(bit64)
#for fast everything
library(data.table)

#here is a sample
df <- structure(list(IDFD = structure(c(5.13878419797985e-299, 5.13878419797985e-299, 
+ 5.13878419797985e-299, 5.13878419797987e-299, 5.13878419797987e-299, 
+ 5.13878419797987e-299, 5.13878419797987e-299, 5.13878419797987e-299, 
+ 5.13878419797988e-299, 5.13878419797988e-299), class = "integer64")), .Names = "IDFD", row.names = c(NA, 
+ -10L), class = c("data.table", "data.frame"))
#write the sample to file
write.csv(df,"test.csv",quote=F,row.names=F)

#I can't load it as characters
options(datatable.integer64='character')
str(fread("test.csv",integer64='character'))
Classes ‘data.table’ and 'data.frame':  10 obs. of  1 variable:
 $ IDFD:Class 'integer64'  num [1:10] 5.14e-299 5.14e-299 5.14e-299 5.14e-299 5.14e-299 ...
4

1 回答 1

11

这是在 R-Forge 上的 v1.8.11 中实现的,但尚未在 CRAN 上实现。来自新闻

o fread 的 integer64 参数已实现。允许将 integer64 数据读取为 'double' 或 'character' 而不是 bit64::integer64 (与以前一样保持默认值)。感谢 Chris Neff 的建议。默认值可以全局更改;例如,选项(datatable.integer64="character")

关于 :

如果 colClasses 是答案,我认为它不允许指定单个列名或索引,并且我加载的表有数十列,所以不切实际......

colClassesinfread确实允许您覆盖一列或几列的类型(按名称或按编号),其余的将被自动检测。正是因为你说的原因。如果没有,请报告为错误。colClasses 的替代方法是 datatable.integer64 全局选项,它可以让您告诉 fread,每当它检测到 integer64 时,它应该将其加载为字符或双精度(在 v1.8.11 中也是如此)。

于 2013-09-10T11:59:20.747 回答