在 fread 中跳过并自动启动

Enr*_*que 5 r data.table

我使用以下代码来读取带有 data.table 库的文件:

fread(myfile, header=FALSE, sep=",", skip=100, colClasses=c("character","numeric","NULL","numeric"))
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

The supplied 'sep' was not found on line 80. To read the file as a single character column set sep='\n'.
Run Code Online (Sandbox Code Playgroud)

它说它在第 80 行没有找到 sep,但是我设置了skip=100,所以它不应该关注前 100 行。

更新: 我尝试使用skip=101并且它有效,但它跳过了数据开始的第一行

我在 Windows 7 上使用 data.table 包的版本 1.9.2 和 R 版本 3.02 64 位

Mat*_*wle 4

我们不知道您使用的版本号,但我可以在这种情况下进行猜测。

尝试设置autostart=101.

请注意以下详细信息的第一段?fread

一旦在第 行找到分隔符autostart,列数就确定了。然后向后搜索文件,autostart直到找到不具有该列数的行。因此,找到第一个数据行,并且自动跳过任何人类可读的横幅。此功能对于加载一组可能不具有一致大小横幅的文件特别有用。设置通过设置并关闭向上搜索步骤skip>0来覆盖此功能。autostart=skip+1

论据skip有:

如果为 -1(默认值),请使用下面描述的过程从在线自动启动开始查找第一个数据行。Skip>=0 表示忽略自动启动,并将行skip+1 作为第一个数据行(或照常根据 header="auto"|TRUE|FALSE 的列名称)。Skip="string" 在文件中搜索“string”(例如,列名行的子字符串)并从该行开始(受到 gdata 包中的 read.xls 的启发)。

并且autostart论据有:

机器可读分隔文本区域内的任何行号,默认为 30。如果文件较短或该行为空(例如带有尾随空白行的短文件),则最后一个非空行(上面有一个非空行)用来。该行及其上方的行用于自动检测 sep、sep2 和字段数。我们希望,自动启动不太可能需要更改。

在你的情况下,人类可读的标题可能比 30 行大得多,这就是我认为设置autostart=101可能有效的原因。无需使用skip

动机之一是当一个文件包含多个表时为了方便。通过设置autostart为要从文件中提取的表内的任何行,它会自动为您找到第一个数据行和标题行,然后仅读取该表。您不必像使用 那样担心在数据开头获取确切的行号skipfread目前只能读取一张表。它可以从单个文件中返回表列表,但这变得有点复杂,而且没有人要求这样做。