0

我正在尝试使用ggbio. 我正在使用下面的代码产生我想要的输出,除了它包含几个成绩单。是否可以只绘制最长的成绩单?我无法访问Homo.sapiens我认为包含此信息的基因组范围对象。

library(ggbio)
library(Homo.sapiens)

range <- GRanges("chr10"  , IRanges(start = 78000000 , end = 79000000))
p.txdb <- autoplot(Homo.sapiens, which = range)
p.txdb
4

1 回答 1

1

这是一个解决方案,涉及过滤TxDb.Hsapiens.UCSC.hg19.knownGene最长的转录本gene_id(它确实删除了没有 的基因gene_id):

suppressPackageStartupMessages({
    invisible(lapply(c("ggbio", "biovizBase", "data.table", 
        "TxDb.Hsapiens.UCSC.hg19.knownGene", 
        "org.Hs.eg.db"),
        require, character.only = TRUE))})
txdb <- TxDb.Hsapiens.UCSC.hg19.knownGene

# retrieve transcript lengths
txlen <- transcriptLengths(txdb, with.utr5_len=TRUE, with.utr3_len=TRUE)
setDT(txlen)
txlen$len <- rowSums(as.matrix(txlen[, .(tx_len, utr5_len, utr3_len)]))
setkey(txlen, gene_id, len, tx_id)

# filter longesttranscript by gene_id
ltx <- txlen[!is.na(gene_id)][, tail(.SD,1), by=gene_id]$tx_id

# filter txdb object
txb <- as.list(txdb)
txb$transcripts <- txb$transcripts[txb$transcripts$tx_id %in% ltx, ]
txb$splicings <- txb$splicings[txb$splicings$tx_id %in% ltx,]
txb$genes <- txb$genes[txb$genes$tx_id %in% ltx,]
txb <- do.call(makeTxDb, txb)

# plot according to vignette, chapter 2.2.5
range <- GRanges("chr10", IRanges(start = 78000000 , end = 79000000))
gr.txdb <- crunch(txb, which = range)
#> Parsing transcripts...
#> Parsing exons...
#> Parsing cds...
#> Parsing utrs...
#> ------exons...
#> ------cdss...
#> ------introns...
#> ------utr...
#> aggregating...
#> Done
colnames(values(gr.txdb))[4] <- "model"
grl <- split(gr.txdb, gr.txdb$gene_id)
symbols <- select(org.Hs.eg.db, keys=names(grl), columns="SYMBOL", keytype="ENTREZID")
#> 'select()' returned 1:1 mapping between keys and columns
names(grl) <- symbols[match(symbols$ENTREZID, names(grl), nomatch=0),"SYMBOL"]
autoplot(grl, aes(type = "model"), gap.geom="chevron")
#> Constructing graphics...

reprex 包(v0.3.0)于 2020-05-29 创建

编辑: 要获取基因符号而不是基因(或转录本)ID,只需将 grl 的名称替换为相关的基因符号,例如 viaorg.Hs.eg.db或任何其他匹配它们的资源。

于 2020-05-28T20:44:28.617 回答