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

MAP*_*APK 6 r bioinformatics bigdata

我需要在 R 中读取至少 10 GB 大小的文件。为了限制内存使用,我只想读取那些匹配模式的行。例如,在mytext.tsv下面的文本文件中,我想从将成为标题的想要的行中读取。然后读取匹配codingsynonymousfrom的行col2,即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  
Run Code Online (Sandbox Code Playgroud)

我预期的数据框应该是:

wanted  col1       col2    
aaa     variant1   coding
ggg     variant3   synonymous
Run Code Online (Sandbox Code Playgroud)

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

我的实际数据示例:

在此处输入图片说明

zx8*_*754 4

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

library(data.table)

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

笔记:

  • 这适用于 *nix 系统。在 Windows 上有一个findstr命令。
  • 正则表达式需要更新以适应您的数据。这只是一个示例,当 grep 查找“编码”等时,它也会返回“非编码”行。