我想了解为什么read.table
和fread
之间存在这种差异。也许您已经知道使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
问题?
答案 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 )