gpt4 book ai didi

r - 通过基因 id 获取 SNP 列表的最佳方法?

转载 作者:行者123 更新时间:2023-12-04 09:07:21 29 4
gpt4 key购买 nike

我有一个很长的基因数据框和各种形式的 id(例如 OMIM、Ensembl、Genatlas)。我想获得与每个基因相关的所有 SNP 的列表。 (这是 this question 的反面。)

到目前为止,我发现的最佳解决方案是使用 biomaRt package (bioconductor) .有一个我需要做的查找类型的示例 here .适合我的目的,这是我的代码:

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 ids 的最低限度需要大约 25 秒。我有几千个基因,所以这需要一整天(假设没有超时或其他错误)。这不可能是对的。我的互联网连接速度不慢(20-30 兆位)。

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

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

如果我可以只下载两张表,一张是基因及其位置,一张是 SNP 及其位置,那么我可以使用 轻松解决这个问题。 dplyr (或者可能 data.table )。我一直没能找到这样的表。

最佳答案

由于您使用的是 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'

我建议您手动仔细检查 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'

结果按基因分组 by_id=TRUE

关于r - 通过基因 id 获取 SNP 列表的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41490657/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com