我有一个很长的基因数据框和各种形式的 id(例如 OMIM、Ensembl、Genatlas)。我想获取与每个基因相关的所有 SNP 的列表。(这是这个问题的反面。)
到目前为止,我发现的最佳解决方案是使用biomaRt包 (bioconductor)。有一个我需要在这里进行的查找的示例。适合我的目的,这是我的代码:
library(biomaRt)
#load the human variation data
variation = useEnsembl(biomart="snp", dataset="hsapiens_snp")
#look up a single gene and get SNP data
getBM(attributes = c(
"ensembl_gene_stable_id",
'refsnp_id',
'chr_name',
'chrom_start',
'chrom_end',
'minor_allele',
'minor_allele_freq'),
filters = 'ensembl_gene',
values ="ENSG00000166813",
mart = variation
)
这会输出一个像这样开头的数据帧:
ensembl_gene_stable_id refsnp_id chr_name chrom_start chrom_end minor_allele minor_allele_freq
1 ENSG00000166813 rs8179065 15 89652777 89652777 T 0.242412
2 ENSG00000166813 rs8179066 15 89652736 89652736 C 0.139776
3 ENSG00000166813 rs12899599 15 89629243 89629243 A 0.121006
4 ENSG00000166813 rs12899845 15 89621954 89621954 C 0.421126
5 ENSG00000166813 rs12900185 15 89631884 89631884 A 0.449681
6 ENSG00000166813 rs12900805 15 89631593 89631593 T 0.439297
(4612 行)
代码有效,但运行时间极长。对于上述情况,大约需要 45 秒。我想这可能与等位基因频率有关,服务器可能会即时计算。但是仅查找 SNP rs id 的最低限度需要大约 25 秒。我有几千个基因,所以这需要一整天(假设没有超时或其他错误)。这不可能。我的互联网连接并不慢(20-30 mbit)。
我尝试在每个查询中查找更多基因。这确实有帮助。一次查找 10 个基因的速度大约是查找单个基因的 10 倍。
获得与基因 ID 载体相关的 SNP 载体的最佳方法是什么?
如果我可以只下载两张表,一张带有基因及其位置,一张带有 SNP 及其位置,那么我可以使用dplyr(或者也许data.table)轻松解决这个问题。我一直找不到这样的表。