使用data.table中的fread()函数导致R会话中止。

6
我正在为一门大规模开放在线课程(MOOC)的项目工作,同时在 RStudio 中尝试使用 data.table 包。最初使用 fread() 函数导入数据文件时运行良好:
fread("UCI HAR Dataset/features.txt")->features
fread("UCI HAR Dataset/test/y_test.txt")->ytest

然而,当我尝试运行下面这行代码时,我收到了一个弹出窗口,上面写着“R Session Aborted: R encountered a fatal error. The session was terminated.”

fread("UCI HAR Dataset/test/X_test.txt")->xtest

我不明白问题出在哪里。我检查了文件名和路径,确保所有拼写和大小写都正确,一切正常。使用read.table()的等效代码可以正常工作,不会导致R中止。我还尝试将文件重命名为“x_test.txt”,但仍然出现了相同的问题。

根据?fread,该函数仅适用于“常规分隔文件”。据我所知,该文件是一个“常规分隔文件”,因为所有行具有相同数量的列。当我使用read.table时,没有单元格包含“NA”,我使用anyNA()进行了检查。有没有快速确定文件是否是分隔符“常规”或者原始文件可能引起问题的其他内容?


更新

经过进一步研究并搜索开发者的github上列出的问题,我认为我的问题在于每行开头有两个空格,这在此处讨论。我不确定为什么R没有警告而中止了程序。然而,在相同的条件下,最新的data.table(1.9.5)开发版本并没有导致会话中止。


1
这是一种应该向软件包维护者报告的错误,最好附带一个可靠地导致异常终止的测试用例。我们很难复制您的观察结果。 - IRTFM
可能是特殊字符\r或嵌套引号的原因。像这样的内容会导致fread失败,建议在Emacs或其他可以查看特殊字符的文本编辑器中打开您的文档。 - Rorschach
1个回答

2

虽然我认为在R会话中止的任何情况下(且不是由于您的C代码搞砸),您应该首先联系软件包维护者,但我可以提供一个策略来解决您的最后一个请求,这并不是特定于fread的,但我发现它在regular-reads()中很有用。我假设这是一个逗号分隔的文件,但如果它是空格分隔的,您可以将sep=","更改为sep=""

filcnts <- count.fields("UCI HAR Dataset/test/X_test.txt", sep=",")
table(filcnts)

这应该是一个单项表格。如果不是,请尝试切换参数,如quotesepblank.lines.skipcomment.char


1
感谢您建议我先联系开发人员。按照他们的错误报告说明所建议的安装data.table()的开发版本,实际上在使用fread()时给了我一个有意义的错误信息,而不是使程序崩溃。 - GH28

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接