从大文件中按编号读取行

Ale*_*huk 24 r line-numbers large-files

我有一个1500万行的文件(不适合内存).我还有一个小的行号矢量 - 我要提取的行.

如何一次性读出线条?

我希望有一个C函数可以一次完成它.

mbq*_*mbq 25

诀窍是使用连接AND之前打开它read.table:

con<-file('filename')
open(con)

read.table(con,skip=5,nrow=1) #6-th line
read.table(con,skip=20,nrow=1) #27-th line
...
close(con)
Run Code Online (Sandbox Code Playgroud)

您也可以尝试scan,它更快,并提供更多的控制.

  • 绝对使用`scan`或`readLines`来提高速度.`read.table`对数据类型,维度等进行了大量检查.最好不要将`c`用作R中的变量,因为它是最常用的函数之一(连接). (5认同)
  • 你能提供更多关于使用`scan`的信息吗? (3认同)
  • @Aleksandr这很简单; 第一个`read.table`将从连接中消耗skip + nrow行,下一个`read.table`将从这一点开始.等等. (2认同)

Ari*_*man 5

如果是二进制文件

一些讨论在这里: 只读取R中Stata .DTA文件的一部分

如果是CSV或其他文本文件

如果它们是连续的并且位于文件的顶部,则只需使用,nrows参数read.csv或任何read.table族.如果没有,您可以组合使用,nrows,skip参数重复调用read.csv(在每个调用中读取新行或一组连续行),然后rbind将结果组合在一起.