- 事情是这样的:师姐说她有一批水稻基因的LOC_Os号,然后就开启了今天的大坑之旅。首先我们查看all.lous文件的行数
-
然后想查找这些基因的注释信息。然后我就想到了tigr里面的all.locus_brief_info.7.0文件,格式是这样的
- 然后这不就变成了一个取交集的问题了吗?由于其他语言我都学的稀烂,自然而然第一反应就想到了R里面的merge,left_join等函数。
wc -l all.locus_brief_info.7.0
66339 all.locus_brief_info.7.0 ##可以看到为66339行
- 然后我使用常规的R读取文件的方法
locs <- read.table(file.choose(),sep = "\t",header = T,stringsAsFactors = FALSE)
-
结果有警告
-
再查看一下行数,wc,只有38111行,少了一大截啊
-
然后我就把警告的内容复制到bird.so,原来很多人都遇到过这总问题
-
点开了其中一个问题贴,果然就得到了自己想要的答案。
回过头一想,这不是警告里面最后那一句话的信息吗,果然还是太年轻了。
Warning message:
In scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
***EOF within quoted string***
- 将代码改了一下
locs <- read.table(file.choose(),sep = "\t",header = T,stringsAsFactors = FALSE,quote = "")
-
再查看一下行数,Perfect! 完美解决,
然后剩下来找个信息就不是问题了
wt <- read.table(file.choose(),header = F,sep = "\t")
head(wt)
colnames(wt) <- "locus"
locs <- read.table(file.choose(),sep = "\t",header = T,stringsAsFactors = FALSE,quote = "")
head(locs)
merge(wt,locs,by.x = "locus") -> data
write.csv(data,"66_annotation.csv",row.names = F)
- 发现比我们要查的目标行数要多,查看了一下数据,发现在loc文件中一个LOC_Os号对应多个annotation,所以就不奇怪了。