read.table 忽略 table 中的一些 \t 和 \n

read.table ignores some \t and \n in a table

我在读取 RNAseq 实验的注释文件时遇到了一个奇怪的问题。

我正在尝试读取制表符分隔的文件 (http://we.tl/qCjv4N3LF2),然后在注释(第四列)中搜索模式 "bahd",以查找类似 [=28] 的条目=] 然后显示属于这些条目的所有 ID(第一列)。代码是:

ShootAnnot<-read.table("annotation1.txt",sep="\t")
matches<-grep("bahd",ShootAnnot[,4],ignore.case=TRUE)
ShootAnnot[matches,1]

奇怪的是,我注意到这并没有找到我知道的所有基因注释——文件中 12 个中只有 9 个匹配。当我扫描 table 以查找丢失的条目时,我发现文件中的一行似乎 R 未能解释分隔模式“\t”和“\n”。

查看数据集中的第4825行:

ShootAnnot[4825,]

出于某种原因,该行中的第六个单元格包含大量数据,其中有许多完整的行以及适当的“\t”和“\n”单元格和行分隔模式都在一个单元格中。然后它突然跳回到正确分离细胞和细胞系。 我有一堆这样的文件,所以我想确保我可以自动解决任何类似的问题。知道是什么原因造成的吗?

谢谢!

我不确定它为什么会乱七八糟(可能是 DOS CR/LF 的事情),但是文件很大,如果你把它插入 data.table 你会得到相当不错的加速仅通过读取数据。

library(data.table)
ShootAnnot <- fread("~/Downloads/annotation1.txt")
ShootAnnot[like(Blast2GO_GO_Description,"bahd"), "#ID", with=FALSE]

这会给你

                       #ID
 1: c112902_g1_i1_m.105401
 2:    c11459_g1_i1_m.4290
 3:    c11459_g2_i1_m.4292
 4: c186946_g1_i1_m.110882
 5:    c24956_g1_i1_m.8768
 6: c265515_g1_i1_m.117383
 7:   c28096_g1_i1_m.10253
 8:   c37936_g1_i1_m.14867
 9:   c40683_g1_i1_m.17292
10:   c54651_g1_i1_m.34709
11:   c54651_g2_i1_m.34711
12:       c921_g1_i1_m.351

(您的文件中没有任何非小写的 "bahd")