datatable.integer64参数不适合我应该吗?

sta*_*ant 4 r long-integer data.table read.csv

我试图加载integer64characterfread ?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 ...
Run Code Online (Sandbox Code Playgroud)

Mat*_*wle 10

这在v-1.8.11中实现,在R-Forge上实现,但尚未在CRAN上实现.来自新闻:

o fread的integer64参数已实现.允许将integer64数据读取为"double"或"character"而不是bit64 :: integer64(这仍然是以前的默认值).感谢Chris Neff提出的建议.默认值可以全局更改; 例如,options(datatable.integer64 ="character")

关于:

如果colClasses是答案,我认为它不允许指定单个列名称或索引,并且我加载的表有几十列,因此不可行......

colClassesfread没有让你为一个或几个列(按名称或编号),其余的将自动检测覆盖类型.正是因为你说的原因.如果没有,请报告错误.colClasses的替代方法是datatable.integer64全局选项,它允许您告诉fread,无论何时检测到integer64,它都应该将其作为字符或双重加载(在v1.8.11中也是如此).

  • 明白了,只是尝试了`colClasses = c(MyCol1 ='character',MyCol2 ='character')`它神奇地工作,如此简单以至于我从未尝试过,你应该停止让事情变得如此简单! (2认同)
  • @statquant哈。但是,有一种新的甚至更简单的方法。尝试`colClasses = list(character = c('MyCol1','Mycol2'))'。或`colClasses = list(character = 3:8)`。这样,您可以一遍又一遍地保存重复的“字符”,以及传递列的范围等。 (2认同)