0

我有一个巨大的逗号分隔文件(1.5 Gb),想从 R 中的文件中读取一个特定的行。

我已经多次看到这个问题的(许多)版本,并且都提出了类似的建议

con = file(fileName)
open(con)
scan(con, what=list("character", "character"), skip=1000000, nlines=1, sep="\t", quiet=TRUE)

这行得通,但它仍然非常慢 - 我们正在谈论 20 到 30 秒来阅读一行!

有更快的方法吗?当然必须有一种快速的方法来跳转到特定的行......

太感谢了!

4

1 回答 1

0

您对文件的结构还有其他了解吗?

如果每一行/行的字节数完全相同,那么您可以计算字节数并计算seek到行的开头。

但是,如果每行的字节数不完全相同,那么您需要读取每个字符,检查它是否是换行符(或其他回车符,或两者兼而有之)并计算那些以找到您正在找。这就是skip争论scan和朋友所做的。

可能有其他工具可以更快地进行读取和计数,您可以对文件进行预处理并仅返回感兴趣的行。

如果您要多次执行此类操作,则可以加快将文件读入不同结构(例如数据库)的整个过程,该结构可以直接访问任意行,或者预先索引这些行,以便您可以seek直接到相应的线路。

于 2013-08-16T23:39:24.247 回答