在fread中跳过并自动启动

时间:2014-02-28 05:12:58

标签: r data.table

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

fread(myfile, header=FALSE, sep=",", skip=100, colClasses=c("character","numeric","NULL","numeric"))

但是我收到以下错误:

The supplied 'sep' was not found on line 80. To read the file as a single character column set sep='\n'.

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

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

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

1 个答案:

答案 0 :(得分: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设置为要从文件中拔出的表中的任何行,它将自动找到第一个数据行和标题行,然后只读取该表。您不必担心在数据开头获取确切的行号,就像使用skip一样。 fread目前只能读取一个表。它可以从单个文件中返回一个表列表,但这有点复杂,没有人要求它。