我有一个巨大的逗号分隔文件(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秒之间谈论读一行!
有更快的方法吗?当然必须有一种快速的方法来跳转到特定的线路......
万分感谢!
答案 0 :(得分:0)
你对文件的结构有什么了解吗?
如果每个行/行具有完全相同的字节数,那么您可以计算字节数和seek
到行的开头。
但是,如果每行的每行字节数不完全相同,则需要读取每个字符,检查它是否是换行符(或其他回车符,或两者都有)并计算这些字符以查找你要找的那条线。这就是skip
与scan
和朋友的争论。
可能还有其他工具可以更快地进行读取和计数,您可以对文件进行预处理并仅返回感兴趣的行。
如果要多次执行此类操作,则可以加快整个过程,将文件读入不同的结构(如数据库),可以直接访问任意行,或者预先对行进行索引您可以seek
直接到相应的行。