如何在 R 中逐行匹配模式读取非常大的文件

How to read very large files line by line matching patterns in R

我需要在 R 中读取至少 10 GB 大小的文件。为了限制内存使用,我只想读取那些匹配模式的行。例如,在下面的文本文件 mytext.tsv 中,我想从将成为 header 的想要的行中读取。然后从 col2 中读取匹配 codingsynonymous 的行,即 patterns.

patterns <- c("coding", "synonymous")

mytext.tsv:

## lines unwanted
## lines unwanted1
## lines unwanted2
## lines unwanted3
wanted  col1       col2    
aaa     variant1   coding
jhjh    variant2   non-coding
ggg     variant3   synonymous
fgg     variant4   coding
gdg     variant6   missense  

我预期的数据框应该是:

wanted  col1       col2    
aaa     variant1   coding
ggg     variant3   synonymous

我知道我可以使用连接和扫描然后遍历每个模式,但是在 R 中有没有有效的方法来做到这一点?

我的实际数据示例:

使用 data.tablecmd 选项和 grep(未测试) :

library(data.table)

fread(cmd = "grep 'coding\|synonymous' mytext.tsv",
      col.names = c("wanted", "col1", "col2"))

注:

  • 这将适用于 *nix 系统。在 Windows 上有一个 findstr 命令。
  • 正则表达式需要更新以适合您的数据。这只是一个示例,它还会 return 在搜索“编码”等时显示“非编码”行