Skip to content

Commit dbe2af9

Browse files
committed
Return exon-level SummarisedExperiment instead of data.table
1 parent b4277ca commit dbe2af9

1 file changed

Lines changed: 17 additions & 12 deletions

File tree

R/summariseByExon.R

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
#' Summarise transcript expression to exon-level expression
22
#' @title summarise by exon
33
#' @param se a \code{SummarizedExperiment} object from \code{\link{bambu}}
4-
#' @return A data.table with columns: exon_id, seqnames, start, end, strand,
5-
#' GENEID, and one count column per sample
4+
#' @return A \code{RangedSummarizedExperiment} with exon-level counts
65
#' @details Counts are summed across all transcripts that share the same exon
76
#' (defined by identical seqnames, start, end, and strand). The returned
87
#' counts therefore represent the total evidence attributed to each unique
98
#' exonic locus across all overlapping transcripts.
109
#' @import data.table
1110
#' @importFrom Matrix sparseMatrix
12-
#' @importFrom SummarizedExperiment assays rowRanges rowData
13-
#' @importFrom GenomicRanges seqnames start end strand
11+
#' @importFrom SummarizedExperiment assays rowRanges rowData colData SummarizedExperiment
12+
#' @importFrom GenomicRanges GRanges seqnames start end strand
13+
#' @importFrom IRanges IRanges
1414
#' @export
1515
summariseByExon <- function(se) {
1616
# Unlist GRangesList: one row per exon-transcript combination
@@ -63,14 +63,19 @@ summariseByExon <- function(se) {
6363
txCounts <- assays(se)$counts
6464
exonCounts <- exonTxMat %*% txCounts
6565

66-
# Combine metadata with aggregated counts
67-
result <- cbind(
68-
exonMeta,
69-
as.data.table(as.matrix(exonCounts))
66+
# Build GRanges for unique exons
67+
exonGRanges <- GRanges(
68+
seqnames = exonMeta$seqnames,
69+
ranges = IRanges(start = exonMeta$start, end = exonMeta$end),
70+
strand = exonMeta$strand
7071
)
72+
names(exonGRanges) <- exonMeta$exon_id
73+
mcols(exonGRanges)$GENEID <- exonMeta$GENEID
7174

72-
# Sort by genomic position
73-
result <- result[order(seqnames, start, end)]
74-
75-
return(result)
75+
# Return as SummarizedExperiment
76+
return(SummarizedExperiment(
77+
assays = list(counts = exonCounts),
78+
rowRanges = exonGRanges,
79+
colData = colData(se)
80+
))
7681
}

0 commit comments

Comments
 (0)