通过基因id获得SNP列表的最佳方法?

Del*_*eet 4 r bioinformatics bioconductor biomart

我有一个长基因数据框架和各种形式的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
)
Run Code Online (Sandbox Code Playgroud)

这将输出一个如下所示的数据框:

  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
Run Code Online (Sandbox Code Playgroud)

(4612行)

代码有效,但运行时间非常长.对于上述情况,大约需要45秒.我想也许这与等位基因频率有关,服务器可能是在飞行中计算的.但只查看SNP的最小值只需要25秒.我有几千个基因,所以这需要一整天(假设没有超时或其他错误).这不可能是对的.我的互联网连接速度不慢(20-30 mbit).

我尝试在每个查询中查找更多基因.这确实有点帮助.一次查找10个基因大约是查找单个基因的10倍.

获得与基因ID载体相关的SNP载体的最佳方法是什么?

如果我可以下载两个表,一个有基因和它们的位置,一个有SNP和它们的位置,那么我可以使用dplyr(或者data.table)轻松解决这个问题.我找不到这样的表格.

Kev*_*vin 5

既然你正在使用R,那么这是一个使用套件rentrez的想法.它利用了NCBI的Entrez数据库系统,尤其是eutils函数,elink.你必须围绕这个编写一些代码并可能调整参数,但这可能是一个好的开始.

library(rentrez)
# for converting gene name -> gene id
gene_search <- entrez_search(db="gene", term="(PTEN[Gene Name]) AND Homo sapiens[Organism]", retmax=1)
geneId <- gene_search$ids 
# elink function
snp_links <- entrez_link(dbfrom='gene', id=geneId, db='snp')

# access results with $links
length(snp_links$links$gene_snp)
5779

head(snp_links$links$gene_snp)
'864622690' '864622594' '864622518' '864622451' '864622387' '864622341' 
Run Code Online (Sandbox Code Playgroud)

我建议您手动仔细检查SNP的数量是否与您感兴趣的基因有关 - 您可能需要进一步向下钻取并通过转录等进行限制......

对于多个基因ID:

multi_snp_links <- entrez_link(dbfrom='gene', id=c("5728", "374654"), db='snp', by_id=TRUE)
lapply(multi_snp_links, function(x) head(x$links$gene_snp))
1.    '864622690' '864622594' '864622518' '864622451' '864622387' '864622341' 
2.    '797045093' '797044466' '797044465' '797044464' '797044463' '797016353' 
Run Code Online (Sandbox Code Playgroud)

结果按基因分组 by_id=TRUE