data.table v.1.11.0 +不再fread由v.1.10.4-3发送的数据文件

Mih*_*ael 1 csv r data.table

我在新版本中遇到了一个可能的错误data.table.我有一个带有c的2GB .csv文件.300万行和67列.我可以使用fread()从data.table v.1.10.4-3中读取它,但v.1.11.0 +在中间某处终止.基地read.csv()也遇到了同样的问题.我非常喜欢data.table并希望在Github上创建一个错误报告,但显然我无法在任何地方上传2GB数据文件.

我需要一种在问题点周围拼接约10行的方法(行号已知),以便创建一个可移植的可重复示例.如果没有在.csv文件中阅读我怎么能这样做?

另外,是否有一个程序可用于打开原始文件以查看有问题的点并查看导致问题的原因?Notepad/Excel不会打开这么大的文件.

编辑:详细输出.

编辑2:是有问题的路线.它表明,应该是一行的是以某种方式分成3行.我只能假设这是由于用于创建CSV的古老软件(SAP Business Objects)中的导出错误.它引起一个问题并不令人惊讶.然而,令人惊讶的是data.tablev.1.10.4-3能够以智能方式处理它并正确读取它,而v.1.11.0 +则不能.它能用编码或技术隐藏字符做些什么吗?

EDIT3:证明这才是真正发生的事情.

Mat*_*wle 5

谢谢你包括输出.它表明fread正在发出警告.你以前错过了这个警告吗?

Warning message: In fread("Data/FP17s with TCD in March 2018.csv", na.strings = c("#EMPTY", : Stopped early on line 138986. Expected 67 fields but found 22. Consider fill=TRUE and comment.char=. First discarded non-empty line: <<916439/0001,Q69,GDS Contract,MR A SYED,916439,Mr,SYED A Mr,A,SYED,58955,3718.00,Nine Mile Ride Dental Practice,Dental Surgery,193 Nine Mile Ride,Finchampstead,WOKINGHAM,RG40 4JD,2181233168.00,TORIN,FASTNEDGE,1 ANCHORITE CLOSE,>>

这肯定非常有用.它告诉你行号:138986.它说这行是22个字段,但它预计67个.警告可以更好地说明为什么它在那个点期待67个字段(例如,说有67个列名称,它有到目前为止看到了67列吗?)它给你一个尝试(fill=TRUE)的提示,它将在23:67列中用NA填充这条太短的线.然后它也包括来自该行的数据.

fill=TRUE如警告信息所示,它是否有效?

你说它在1.10.4-3中有效,但我怀疑它更有可能在那里提前停止,但没有警告.如果是这样,这是一个不警告的错误,现在已修复.