我正在尝试将integer64
加载为character
中的fread
?fread
表示未实现integer64
参数,但options(datatable.integer64)
已实现。尽管fread始终以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 ...
最佳答案
这是在v-1.8.11中在R-Forge上实现的,但尚未在CRAN上实现。从NEWS:
o fread的integer64参数已实现。允许读取integer64数据为“ double”或“ character”
而不是bit64 :: integer64(仍然是以前的默认设置)。感谢克里斯·内夫
建议。默认值可以全局更改。例如,选项(datatable.integer64 =“ character”)
关于:
如果colClasses是答案,我认为它不允许指定单个列名或索引,并且我加载的表具有数十列,因此不切实际。colClasses
中的fread
允许您覆盖一列或几列的类型(按名称或数字),其余的将被自动检测。正是出于您陈述的原因。如果不是,请报告为错误。 colClasses的替代方法是datatable.integer64全局选项,该选项使您告诉fread,只要检测到integer64,就应将其作为字符或double加载(在v1.8.11中也是如此)。