R workarounds:fread vs read.table

时间:2014-10-14 11:30:37

标签: r fread read.table

我想了解为什么read.tablefread之间存在这种差异。也许您已经知道使fread工作的解决方法。我有两行代码执行相同的目标 - 读取文件。 fread的执行速度比read.table更快,效率更高,但read.table在同一数据集上产生的错误更少。

成功的READ.TABLE方法

table <- read.table("A.txt",header=FALSE,sep = "|", fill=TRUE, quote="", stringsAsFactors=FALSE)

FREAD方法

table <- fread("A.txt",header=FALSE,sep = "|")

FREAD返回我探索过的经典错误

  

预期的sep(&#39; |&#39;)但新行或EOF在读取数据时在第57193行结束字段44

最初,当read.table未包含且无法读取文件时,fill=TRUE返回了我认为类似的错误。

  

扫描错误(文件,什么,nmax,sep,dec,quote,skip,nlines,na.strings,:第7行没有45个元素

我认为错误可能在某种程度上相似。根据文档,填写允许以下内容。如果为TRUE,则在行具有不等长度的情况下,隐式添加空白字段。

是否有可解决的fill=TRUE类似的解决方案可能会解决fread问题?

2 个答案:

答案 0 :(得分:0)

来自MATT DOWLE的回答:Fill option for fread

更新:不太可能完成。 fread针对常规分隔文件进行了优化(其中每行具有相同的列数)。但是,当实现sep2时,不规则文件可以被读入列表列(每个单元本身就是一个向量);没有像read.csv那样填写单独的列。

答案 1 :(得分:0)

此答案突出显示data.table 现在fill使用fread的方式。

https://stackoverflow.com/a/34197074/1569064

    fread(input, sep="auto", sep2="auto", nrows=-1L, header="auto", na.strings="NA",
         stringsAsFactors=FALSE, verbose=getOption("datatable.verbose"), autostart=1L,
         skip=0L, select=NULL, drop=NULL, colClasses=NULL,
         integer64=getOption("datatable.integer64"),         # default: "integer64"
         dec=if (sep!=".") "." else ",", col.names,
         check.names=FALSE, encoding="unknown", quote="\"",
         strip.white=TRUE, fill=FALSE, blank.lines.skip=FALSE, key=NULL,
         showProgress=getOption("datatable.showProgress"),   # default: TRUE
         data.table=getOption("datatable.fread.datatable")   # default: TRUE
         )