0

I have the following problem: I want to find the next 5 gene in (chr1_gene) on both side of a interval give from the GRanges (gr3) and generate a dataframe containing chr start end (from gr3) of the interval and i column for each ensembl_transcript_id with eventually NA.

Thanks a lot for suggestions!

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
user3300849
  • 189
  • 2
  • 13

1 Answers1

0

At the moment I have this function based on follow() and precede() but it is extremely slow, and I would like to know if there is a more efficient way to do it. Thanks!

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)))
user3300849
  • 189
  • 2
  • 13