我有一堆蛋白质ID,我需要检索相应的编码序列(CDS)。我已设法检索CDS,但每个序列的名称从XP *更改为XM *,我需要为每个序列保留XP *标头。
基本上它看起来像这样:
library(renters)
search1 <- entrez_search(db="protein", term="XP_012370245[Accn]")
links <- entrez_link(dbfrom="protein", db="nuccore", id=search1$ids)
rec <- entrez_fetch(db="nuccore", rettype="fasta", id=links$links$protein_nuccore_mrna[1])
输出如下:
> rec
[1] ">XM_012514791.1 PREDICTED: Octodon degus Hermansky-Pudlak syndrome 6 (Hps6), mRNA
\nATGCAGAGGAAAAACTTTATGTCATTCTTCACAGGCTTCCTGGAGAAGCGGGCCTGGCCGGAGGCCCGCG\nCCGCGCCGCTGGACGCCTTCTTCCTGGCGTGGCCGGCGCAGCCCGCGGTGGCGCTGGTGTGGGAGAGCGG (...)
有没有办法保留蛋白质id(XP_012370245)而不是核苷酸id(XM_012514791.1)?类似的东西:
> rec
[1] ">XP_012370245
\nATGCAGAGGAAAAACTTTATGTCATTCTTCACAGGCTTCCTGGAGAAGCGGGCCTGGCCGGAGGCCCGCG\nCCGCGCCGCTGGACGCCTTCTTCCTGGCGTGGCCGGCGCAGCCCGCGGTGGCGCTGGTGTGGGAGAGCGG (...)
我用BioMart R包(biomaRt)完成了这项工作,但租借雷兹似乎更难。
非常欢迎任何建议,谢谢!
答案 0 :(得分:2)
这是来自rentrez github存储库的David Winter的答案:
我认为在NCBI末端没有办法做到这一点(核苷酸记录有核苷酸ID)。
你可以做些什么来通过stringr或基本字符串操作函数替换ID。这适用于您的示例(尽管您可能希望添加一些检查以确保您实际发现CDS序列等):
fetch_cds <- function(prot_acc){
search1 <- entrez_search(db="protein", term=paste0(prot_acc, "[Accn]"))
links <- entrez_link(dbfrom="protein", db="nuccore", id=search1$ids)
rec <- entrez_fetch(db="nuccore", rettype="fasta", id=links$links$protein_nuccore_mrna[1])
sub("XM_\\d+\\.\\d", prot_acc, rec)
}
cat(substr(fetch_cds("XP_012370245"), 1, 500), "\n")
>XP_012370245 PREDICTED: Octodon degus Hermansky-Pudlak syndrome 6 (Hps6), mRNA
ATGCAGAGGAAAAACTTTATGTCATTCTTCACAGGCTTCCTGGAGAAGCGGGCCTGGCCGGAGGCCCGCG
CCGCGCCGCTGGACGCCTTCTTCCTGGCGTGGCCGGCGCAGCCCGCGGTGGCGCTGGTGTGGGAGAGCGG
CCTGGCGGAGCTCTGGGGTGCCGACCTGGGGTCCGCCTGGAGGCGGCTTCACGCCACCGAACTGTGTCCG
CGCGGCGCAGTCCGCGTGGTGGCAGCGGTGGCGCCGCGGGGCCGCCTGGTGTGGTGCGAGGAGCGCCCGG
GCGCGGGCGGACGCCGCGTGTGCGTCCGCACCCTAGAGCCTGGCGGCGAGACTGGTGCCCGCCTGGGCCG
CACGCACGTCCTGCTGCACCACTGCCCGCCCTTCCACCTGCTGGCCTCGCGCAAGGACGTCTTCC