【问题标题】:Read only one line with fread from data.table从 data.table 中读取 fread 的一行
【发布时间】:2016-12-17 19:48:21
【问题描述】:

我有以下文件:

bla;bla;
0;1;2;3;4;

我只想读取带有 fread 的第一行(来自 data.table 1.10.0):

fread('data/test.txt', nrows = 1, skip = 0, colClasses = "character", autostart = 0, header = F)

它会产生以下警告:

Warning message: 
In fread("data/test.txt", nrows = 1, skip = 0, colClasses = "character",  : 
Starting data input on line 2 and discarding line 1 because it has too few or too many items to be column names or data: bla;bla;

【问题讨论】:

  • 您特别想使用freadreadLines 怎么样?也可以尝试fill = T 参数与fread
  • 如果速度很快,我可以使用 readLines。我有很多文件要读取,首先我从 readr 尝试了 read_csv2,但它比 fread 慢得多。我会试试 readLines,谢谢。
  • 我相信fread 最初会扫描文件结构。而readLines 将文件作为连接处理,并且只读取前 x 行,而不管内容如何。
  • 如果你有很多文件并且只需要每个文件的第一行,也许你应该先使用不同的工具将这些行提取并堆叠在一个文件中,然后再读入 r。我想一定有办法在命令行中做到这一点。
  • fread 不太可能比readLines 更快,因为由于一些开销,只读取了许多文件中的一行;正如弗兰克建议的那样,您最好通过命令行将文件连接成一个更大的文件,然后 freading 输出该文件

标签: r data.table


【解决方案1】:

我认为现在的fread 行不通。包装说明明确说明

‘fread’用于常规分隔文件;即,每一行都有相同的>列数。将来,可能会指定辅助分隔符 (sep2) 在每一列中。这样的列将被读取为类型列表,其中每个单元格>本身就是一个向量。

我尝试了组合 sep=";"和 sep2=";",但这不起作用。

随着所有这些自动检测的进行,我认为当您只想阅读第一行时,一些没有自动检测的方法可能会更快。

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    相关资源
    最近更新 更多