r语言 - 查找给定区域的下一个不重叠的第 n 个元素



我有以下问题:我想在 (chr1_gene) 中找到来自 GRanges (gr3) 的区间两侧的下一个 5 个基因,并生成一个数据帧,其中包含区间的 chr 开始结束(从 gr3 开始)和每个ensembl_transcript_id的 i 列,最终为 NA。

非常感谢您的建议!

df <- data.frame(chrom=c("chr1","chr1"), start=c(5087459, 9995206 ),   end=c(5097899, 10015020 ))
gr3 <- as(df, "GRanges")

library(biomaRt)
ensembl = useEnsembl(biomart="ensembl", dataset="hsapiens_gene_ensembl")
chr1_genes <- getBM(attributes=c('ensembl_gene_id',
'ensembl_transcript_id','hgnc_symbol','chromosome_name','start_position','end_position'), filters =
'chromosome_name', values ="1", mart = ensembl)
head(chr1_gene)
ensembl_gene_id ensembl_transcript_id hgnc_symbol chromosome_name start_position end_position
1 ENSG00000231510       ENST00000443270                           1        5086459      5090899
2 ENSG00000162444       ENST00000315901        RBP7               1        9997206     10016020
3 ENSG00000162444       ENST00000294435        RBP7               1        9997206     10016020
4 ENSG00000270171       ENST00000602640                           1        7693124      7694844
5 ENSG00000225643       ENST00000412797                           1       25581478     25590356
6 ENSG00000116497       ENST00000530710     S100PBP               1       32816767     32858879

目前我有这个基于 follow() 和 precede() 的函数,但它非常慢,我想知道是否有更有效的方法可以做到这一点。谢谢!

enh25gens <- function(gr, GR){
idxf.1 <- follow(gr, subject = GR)
fol.gene <- mcols(GR[idxf.1:(idxf.1+4)])$ensembl_gene_id
idxf.1 <- precede(gr, subject = GR)
pre.gene <- mcols(GR[idxf.1:(idxf.1+4)])$ensembl_gene_id
list.enh2gene <- unlist(c(as.data.frame(gr[1]), pre.gene,fol.gene ))
return(list.enh2gene)
}
do.call(rbind.data.frame, lapply(gr3, function(x) enh25gens((x),chr1_genes.GR)))

相关内容

  • 没有找到相关文章

最新更新