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

GH2*_*H28 6 session r fread data.table

我正在为一个 MOOC 项目工作,并且正在修补data.tableRStudio 中的包。使用该fread()函数导入数据文件最初工作正常:

fread("UCI HAR Dataset/features.txt")->features
fread("UCI HAR Dataset/test/y_test.txt")->ytest
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行以下代码行时,我收到一个弹出窗口,显示“R 会话中止:R 遇到致命错误。会话已终止。”

fread("UCI HAR Dataset/test/X_test.txt")->xtest
Run Code Online (Sandbox Code Playgroud)

我不明白问题是什么。我检查了文件名和路径以确保我正确拼写和大写了所有内容,然后全部检查出来。使用 read.table() 的等效代码工作正常并且不会导致 R 中止。我也尝试将文件重命名为“x_test.txt”,但发生了同样的问题。

根据?fread,只有该功能仅适用于“常规分隔文件”。据我所知,该文件是一个“常规分隔文件”,因为所有行都具有相同的列数。当我使用 read.table 时,没有包含“NA”的单元格;我检查使用anyNA(). 有没有一种快速的方法来确定文件是否是“定期”分隔的?原始文件是否还有其他可能导致问题的原因?


更新

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

42-*_*42- 2

尽管我确实相信您应该在 R 会话中止的任何情况下首先联系包维护者(并且这不是由于您对 C 代码进行了修改),但我可以为您的最后一个请求提供一个策略,该策略并不是非常具体但fread我发现常规读取()很有用。我假设这是一个逗号分隔的文件,但如果它是; 的空格分隔,您可以将其更改sep=","sep="".

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

那应该是一个单项表。如果没有,请尝试切换参数,例如quote、、 或sepblank.lines.skipcomment.char