1 Load dataset

Let’s ensure that the previously mentioned file are in our working directory.

# Specify a working directory
directory <- "/Volumes/DataWinBackup/00_MASTER UOC BIOINFORMATICA - TEMPORAL/TFM-UOC/DTU44CRC"
setwd(directory)
list.files()
 [1] "all_parameters_isoforms.csv"                            
 [2] "DTU ANALYSIS CLUSTER"                                   
 [3] "DTU_2crc.RData"                                         
 [4] "Dtu_44crc_cache"                                        
 [5] "Dtu_44crc_cluster.Rmd"                                  
 [6] "Dtu_44crc.html"                                         
 [7] "DTU_44crc.RData"                                        
 [8] "Dtu_44crc.Rmd"                                          
 [9] "dtu-read-rds-cluster_cache"                             
[10] "dtu-read-rds-cluster.html"                              
[11] "dtu-read-rds-cluster.Rmd"                               
[12] "dtu-read-rds-isoforms_42_44 copy.Rmd"                   
[13] "dtu-read-rds-isoforms_42_44_cache"                      
[14] "dtu-read-rds-isoforms_42_44_files"                      
[15] "dtu-read-rds-isoforms_42_44-copy_cache"                 
[16] "dtu-read-rds-isoforms_42_44-copy.Rmd"                   
[17] "dtu-read-rds-isoforms_42_44.html"                       
[18] "dtu-read-rds-isoforms_42_44.Rmd"                        
[19] "dtu-read-rds-isoforms.Rmd"                              
[20] "extractConsequenceEnrichmentComparison.csv"             
[21] "extractConsequenceSummary.csv"                          
[22] "extractSplicingEnrichmentComparison.csv"                
[23] "extractSplicingGenomeWide.csv"                          
[24] "extractSplicingSummary.csv"                             
[25] "figures"                                                
[26] "gencode.v49.primary_assembly.annotation.filtered.gtf.gz"
[27] "gene.SummarizedExperiment.metadata.rds"                 
[28] "genome.transcripts.fa.gz"                               
[29] "genome.transcripts.gencode.fa.gz"                       
[30] "Homo_sapiens.GRCh38.115.filtered.gtf.gz"                
[31] "mySwitchList_consequences_42_44.rds"                    
[32] "mySwitchList_saturn_consequences.rds"                   
[33] "salmon.merged.transcript_counts_gencode.tsv"            
[34] "salmon.merged.transcript_counts.tsv"                    
[35] "salmon.merged.transcript_tpm_gencode.tsv"               
[36] "salmon.merged.transcript_tpm.tsv"                       
[37] "salmon.merged.transcript.SummarizedExperiment.rds"      
[38] "salmonQuant_inspection.rds"                             
[39] "tables"                                                 
[40] "top_switch_genes.csv"                                   
[41] "top_switch_isoforms.csv"                                
[42] "tx2gene.tsv"                                            
# Load file
mySwitchList <- readRDS("mySwitchList_consequences_42_44.rds")

# [1] 'aSwitchList' 'counts' 'directory' 'myDesign' 'tpm'
# View salmonQuant
names(mySwitchList)
 [1] "isoformFeatures"             "exons"                      
 [3] "conditions"                  "designMatrix"               
 [5] "sourceId"                    "isoformCountMatrix"         
 [7] "isoformRepExpression"        "runInfo"                    
 [9] "orfAnalysis"                 "isoformRepIF"               
[11] "ntSequence"                  "isoformSwitchAnalysis"      
[13] "aaSequence"                  "AlternativeSplicingAnalysis"
[15] "intronRetentionAnalysis"     "switchConsequence"          
head(mySwitchList, 3)
                iso_ref          gene_ref        isoform_id gene_id
110561 isoComp_00001664 geneComp_00000111 ENST00000337334.7 ABHD12B
        condition_1 condition_2 gene_name   gene_biotype    iso_biotype
110561 normal_eocrc tumor_eocrc   ABHD12B protein_coding protein_coding
       gene_overall_mean gene_value_1 gene_value_2 gene_stderr_1 gene_stderr_2
110561          2.970463     2.135247     3.788574     0.4050145       1.35647
       gene_log2_fold_change gene_q_value iso_overall_mean iso_value_1
110561             0.8243139           NA        0.3661316   0.3411125
       iso_value_2 iso_stderr_1 iso_stderr_2 iso_log2_fold_change iso_q_value
110561   0.3847805   0.07567231    0.2025121            0.1691176          NA
       IF_overall       IF1      IF2        dIF isoform_switch_q_value
110561  0.1631526 0.1817588 0.072125 -0.1096338              0.9997642
       gene_switch_q_value   PTC IR switchConsequencesGene
110561           0.4261566 FALSE  0                     NA
 [ reached 'max' / getOption("max.print") -- omitted 2 rows ]
# Summary
mySwitchList$isoformFeatures
                iso_ref          gene_ref        isoform_id gene_id
110561 isoComp_00001664 geneComp_00000111 ENST00000337334.7 ABHD12B
        condition_1 condition_2 gene_name   gene_biotype    iso_biotype
110561 normal_eocrc tumor_eocrc   ABHD12B protein_coding protein_coding
       gene_overall_mean gene_value_1 gene_value_2 gene_stderr_1 gene_stderr_2
110561          2.970463     2.135247     3.788574     0.4050145       1.35647
       gene_log2_fold_change gene_q_value iso_overall_mean iso_value_1
110561             0.8243139           NA        0.3661316   0.3411125
       iso_value_2 iso_stderr_1 iso_stderr_2 iso_log2_fold_change iso_q_value
110561   0.3847805   0.07567231    0.2025121            0.1691176          NA
       IF_overall       IF1      IF2        dIF isoform_switch_q_value
110561  0.1631526 0.1817588 0.072125 -0.1096338              0.9997642
       gene_switch_q_value   PTC IR switchConsequencesGene
110561           0.4261566 FALSE  0                     NA
 [ reached 'max' / getOption("max.print") -- omitted 1842 rows ]

2 Review mySwithList object

# Summary
extractSwitchSummary(mySwitchList, filterForConsequences = T)
                   Comparison nrIsoforms nrSwitches nrGenes
1 normal_eocrc vs tumor_eocrc         14         10      10
2 normal_locrc vs tumor_locrc        132        122     103
3                    Combined        140        128     109
# Summary
extractSwitchSummary(mySwitchList, filterForConsequences = TRUE, alpha = 0.05, dIFcutoff = 0.05)
                   Comparison nrIsoforms nrSwitches nrGenes
1 normal_eocrc vs tumor_eocrc         14         14      10
2 normal_locrc vs tumor_locrc        140        189     103
3                    Combined        148        198     109

# Extract top switching genes (by q-value) from each comparison
top_switch_genes <- extractTopSwitches(mySwitchList, filterForConsequences = TRUE,
    extractGenes = TRUE, alpha = 0.05, dIFcutoff = 0.05, n = 109, inEachComparison = FALSE,
    sortByQvals = TRUE)

keep <- c("gene_id", "condition_1", "condition_2", "gene_switch_q_value", "Rank")
top_switch_genes <- top_switch_genes[keep]
top_switch_genes
   gene_id  condition_1 condition_2 gene_switch_q_value Rank
1     TPM2 normal_eocrc tumor_eocrc        0.0001116680    1
2   SORBS2 normal_locrc tumor_locrc        0.0001544585    2
3     TPM2 normal_locrc tumor_locrc        0.0001544585    3
4    FSIP1 normal_locrc tumor_locrc        0.0001622092    4
5  OSBPL1A normal_locrc tumor_locrc        0.0002382206    5
6  MAP3K20 normal_locrc tumor_locrc        0.0003502090    6
7     CD44 normal_locrc tumor_locrc        0.0004922797    7
8   CXCL12 normal_locrc tumor_locrc        0.0006191435    8
9      NLN normal_locrc tumor_locrc        0.0006191435    9
10   HNF4A normal_locrc tumor_locrc        0.0009308128   10
 [ reached 'max' / getOption("max.print") -- omitted 99 rows ]
# Save results
write.csv(top_switch_genes, "top_switch_genes.csv")
# Extract top switching genes (by q-value) from each comparison
top_switch_isoforms <- extractTopSwitches(mySwitchList, filterForConsequences = TRUE,
    extractGenes = FALSE, alpha = 0.05, dIFcutoff = 0.05, n = 148, inEachComparison = FALSE,
    sortByQvals = TRUE)

keep <- c("isoform_id", "gene_id", "condition_1", "condition_2", "dIF", "isoform_switch_q_value",
    "Rank")
top_switch_isoforms <- top_switch_isoforms[keep]
top_switch_isoforms
          isoform_id gene_id  condition_1 condition_2    dIF
1  ENST00000378292.9    TPM2 normal_eocrc tumor_eocrc -0.133
2  ENST00000698539.1  SORBS2 normal_locrc tumor_locrc -0.233
3  ENST00000378292.9    TPM2 normal_locrc tumor_locrc -0.173
4  ENST00000642527.1   FSIP1 normal_locrc tumor_locrc  0.112
5  ENST00000319481.8 OSBPL1A normal_locrc tumor_locrc  0.294
6  ENST00000338983.7 MAP3K20 normal_locrc tumor_locrc -0.273
7 ENST00000263398.11    CD44 normal_locrc tumor_locrc -0.311
  isoform_switch_q_value Rank
1           0.0001116680    1
2           0.0001544585    2
3           0.0001544585    3
4           0.0001622092    4
5           0.0002382206    5
6           0.0003502090    6
7           0.0004922797    7
 [ reached 'max' / getOption("max.print") -- omitted 141 rows ]
# Save results
write.csv(top_switch_isoforms, "top_switch_isoforms.csv")

3 Analysis of Individual Isoform Switching

3.1 Top 3 EOCRC switch genes

3.2 Top 3 LOCRC switch genes

4 Genes with overlapped isoforms

5 Genome-wide Summaries

5.1 Consequence Enrichment Analysis

{r, extract_consequence_enrichment, echo=FALSE extractConsequenceEnrichment( mySwitchList, consequencesToAnalyze='all', countGenes = FALSE, analysisOppositeConsequence = TRUE, localTheme = theme_bw(base_size = 14), returnResult = TRUE )

5.2 Splicing Enrichment Analysis

   condition_1 condition_2                            AStype nUp nDown
1 normal_eocrc tumor_eocrc     A3 gain (paired with A3 loss)   1     2
2 normal_eocrc tumor_eocrc     A5 gain (paired with A5 loss)   1     3
3 normal_eocrc tumor_eocrc ATSS gain (paired with ATSS loss)   2     4
4 normal_eocrc tumor_eocrc ATTS gain (paired with ATTS loss)   5     2
     propUp  propUpCiLo propUpCiHi propUpPval propUpQval Significant
1 0.3333333 0.008403759  0.9057007   1.000000          1       FALSE
2 0.2500000 0.006309463  0.8058796   0.625000          1       FALSE
3 0.3333333 0.043271868  0.7772219   0.687500          1       FALSE
4 0.7142857 0.290420864  0.9633074   0.453125          1       FALSE
                     Comparison
1 normal_eocrc\nvs\ntumor_eocrc
2 normal_eocrc\nvs\ntumor_eocrc
3 normal_eocrc\nvs\ntumor_eocrc
4 normal_eocrc\nvs\ntumor_eocrc
 [ reached 'max' / getOption("max.print") -- omitted 11 rows ]

5.3 Overview Plots

6 Analysis of overlapped isoforms

# Extract gene data
overlapGenes <- c("TPM2", "LMNB2", "MAP3K20", "HOXB-AS3")

four_genes_data <- mySwitchList$isoformFeatures %>%
    dplyr::filter(gene_name %in% overlapGenes, isoform_switch_q_value < 0.05, abs(dIF) >
        0.05) %>%
    dplyr::select(isoform_id, gene_name, iso_biotype, condition_1, condition_2, dIF,
        isoform_switch_q_value, gene_switch_q_value, gene_log2_fold_change) %>%
    dplyr::arrange(isoform_switch_q_value) %>%
    dplyr::mutate(direction = ifelse(dIF > 0, "Up in tumor", "Down in tumor"))

# View results
print(four_genes_data)
         isoform_id gene_name    iso_biotype  condition_1 condition_2
1 ENST00000378292.9      TPM2 protein_coding normal_eocrc tumor_eocrc
2 ENST00000378292.9      TPM2 protein_coding normal_locrc tumor_locrc
3 ENST00000338983.7   MAP3K20 protein_coding normal_locrc tumor_locrc
4 ENST00000329305.6      TPM2 protein_coding normal_locrc tumor_locrc
5 ENST00000329305.6      TPM2 protein_coding normal_eocrc tumor_eocrc
         dIF isoform_switch_q_value gene_switch_q_value gene_log2_fold_change
1 -0.1325048           0.0001116680        0.0001116680             -2.476681
2 -0.1732318           0.0001544585        0.0001544585             -2.536791
3 -0.2727864           0.0003502090        0.0003502090              1.306201
4  0.1148136           0.0018008163        0.0001544585             -2.536791
5  0.1009333           0.0025111748        0.0001116680             -2.476681
      direction
1 Down in tumor
2 Down in tumor
3 Down in tumor
4   Up in tumor
5   Up in tumor
 [ reached 'max' / getOption("max.print") -- omitted 7 rows ]
# Save results Format decimals of top_genes dataframe
format_numeric <- function(x) {
    if (is.numeric(x)) {
        formatted <- ifelse(abs(x) < 0.001 & !is.na(x), formatC(x, format = "e",
            digits = 2), as.character(round(x, 4)))
        return(formatted)
    } else {
        return(x)
    }
}

# Apply format_numeric function
four_genes_data_formatted <- four_genes_data %>%
    mutate(across(where(is.numeric), format_numeric))
four_genes_data_formatted
         isoform_id gene_name    iso_biotype  condition_1 condition_2     dIF
1 ENST00000378292.9      TPM2 protein_coding normal_eocrc tumor_eocrc -0.1325
2 ENST00000378292.9      TPM2 protein_coding normal_locrc tumor_locrc -0.1732
3 ENST00000338983.7   MAP3K20 protein_coding normal_locrc tumor_locrc -0.2728
4 ENST00000329305.6      TPM2 protein_coding normal_locrc tumor_locrc  0.1148
5 ENST00000329305.6      TPM2 protein_coding normal_eocrc tumor_eocrc  0.1009
  isoform_switch_q_value gene_switch_q_value gene_log2_fold_change
1               1.12e-04            1.12e-04               -2.4767
2               1.54e-04            1.54e-04               -2.5368
3               3.50e-04            3.50e-04                1.3062
4                 0.0018            1.54e-04               -2.5368
5                 0.0025            1.12e-04               -2.4767
      direction
1 Down in tumor
2 Down in tumor
3 Down in tumor
4   Up in tumor
5   Up in tumor
 [ reached 'max' / getOption("max.print") -- omitted 7 rows ]
# Export table to .tex format
table_tex <- kable(four_genes_data_formatted, format = "latex", booktabs = TRUE,
    linesep = "")

writeLines(table_tex, "tables/6_shared_isoforms.tex")
# library(dplyr) overlapGenes <- c('TPM2', 'LMNB2', 'MAP3K20', 'HOXB-AS3') #
# Extraer todos los parámetros con los nombres correctos all_parameters <-
# mySwitchList$isoformFeatures %>% dplyr::filter(gene_name %in% overlapGenes,
# isoform_switch_q_value < 0.05, abs(dIF) > 0.05) %>% dplyr::select( #
# =========== IDENTIFICADORES =========== isoform_id, gene_id, gene_name,
# gene_biotype, iso_biotype, # =========== CONDICIONES =========== condition_1,
# condition_2, # =========== 1. GENE EXPRESSION =========== # Expresión génica
# total gene_exp_cond1 = gene_value_1, # Normal gene_exp_cond2 = gene_value_2,
# # Tumor gene_overall_mean, # Promedio general gene_stderr_1, # Error estándar
# cond1 gene_stderr_2, # Error estándar cond2 gene_log2_fold_change, # Log2FC
# del gen gene_q_value, # q-value del gen # =========== 2. ISOFORM EXPRESSION
# =========== # Expresión por isoforma iso_exp_cond1 = iso_value_1, # Normal
# iso_exp_cond2 = iso_value_2, # Tumor iso_overall_mean, # Promedio general
# iso_stderr_1, # Error estándar cond1 iso_stderr_2, # Error estándar cond2
# iso_log2_fold_change, # Log2FC del isoforma iso_q_value, # q-value del
# isoforma # =========== 3. ISOFORM USAGE =========== # Uso/fracción de
# isoforma IF_overall, # Fracción general IF_cond1 = IF1, # Fracción en
# condición 1 (0-1) IF_cond2 = IF2, # Fracción en condición 2 (0-1) dIF, #
# Cambio en fracción: IF2 - IF1 # =========== SIGNIFICANCIA SWITCHING
# =========== isoform_switch_q_value, gene_switch_q_value, # ===========
# CARACTERÍSTICAS ADICIONALES =========== PTC, # Premature Termination Codon
# IR, # Intron Retention switchConsequencesGene # Consecuencias del switching )
# %>% # =========== CÁLCULOS DERIVADOS =========== dplyr::mutate( # Fold
# changes lineales (a partir de log2FC) gene_fold_change =
# 2^gene_log2_fold_change, iso_fold_change = 2^iso_log2_fold_change, #
# Significancia de expresión génica gene_expr_sig = gene_q_value < 0.05, #
# Significancia de expresión de isoforma iso_expr_sig = iso_q_value < 0.05, #
# Significancia de switching switching_sig = isoform_switch_q_value < 0.05 &
# abs(dIF) > 0.05, # Dirección del switching switching_direction = case_when(
# dIF > 0.1 & isoform_switch_q_value < 0.05 ~ 'Significant Increase', dIF <
# -0.1 & isoform_switch_q_value < 0.05 ~ 'Significant Decrease',
# isoform_switch_q_value < 0.05 ~ 'Significant Small Change', TRUE ~
# 'Non-significant' ), # Clasificación por contribución
# isoform_contribution_cond1 = (iso_exp_cond1 / gene_exp_cond1) * 100,
# isoform_contribution_cond2 = (iso_exp_cond2 / gene_exp_cond2) * 100, # Cambio
# en contribución contribution_change = isoform_contribution_cond2 -
# isoform_contribution_cond1, # Dominancia dominance = case_when( IF_cond1 >
# 0.7 & IF_cond2 > 0.7 ~ 'Major in Both', IF_cond1 > 0.7 ~ 'Major in Normal',
# IF_cond2 > 0.7 ~ 'Major in Tumor', IF_cond1 > 0.5 | IF_cond2 > 0.5 ~
# 'Intermediate', TRUE ~ 'Minor' ) ) %>% # =========== ORDENAR ===========
# dplyr::arrange(gene_name, isoform_switch_q_value, desc(abs(dIF))) # Ver las
# primeras filas print(all_parameters, n = 15) write.csv(all_parameters,
# 'all_parameters_isoforms.csv', row.names = FALSE)

7 R Session Information

─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.5.1 (2025-06-13)
 os       macOS Ventura 13.7.3
 system   x86_64, darwin20
 ui       X11
 language (EN)
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       Europe/Madrid
 date     2026-02-03
 pandoc   3.2 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/x86_64/ (via rmarkdown)
 quarto   1.5.57 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/quarto

─ Packages ───────────────────────────────────────────────────────────────────
 package               * version   date (UTC) lib source
 abind                   1.4-8     2024-09-12 [1] CRAN (R 4.5.0)
 annotate                1.88.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 AnnotationDbi         * 1.72.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 AnnotationFilter        1.34.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 AnnotationHub           4.0.0     2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 base64enc               0.1-3     2015-07-28 [1] CRAN (R 4.5.0)
 Biobase               * 2.70.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 BiocFileCache           3.0.0     2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 BiocGenerics          * 0.56.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 BiocIO                  1.20.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 BiocManager             1.30.27   2025-11-14 [1] CRAN (R 4.5.1)
 BiocParallel          * 1.44.0    2025-10-30 [1] Bioconductor 3.22 (R 4.5.1)
 BiocVersion             3.22.0    2025-10-07 [1] Bioconductor 3.22 (R 4.5.1)
 biomaRt                 2.66.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 Biostrings            * 2.78.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 bit                     4.6.0     2025-03-06 [1] CRAN (R 4.5.0)
 bit64                   4.6.0-1   2025-01-16 [1] CRAN (R 4.5.0)
 bitops                  1.0-9     2024-10-03 [1] CRAN (R 4.5.0)
 blob                    1.2.4     2023-03-17 [1] CRAN (R 4.5.0)
 boot                    1.3-32    2025-08-29 [1] CRAN (R 4.5.1)
 BSgenome                1.78.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 bslib                   0.9.0     2025-01-30 [1] CRAN (R 4.5.0)
 cachem                  1.1.0     2024-05-16 [1] CRAN (R 4.5.0)
 cigarillo               1.0.0     2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 cli                     3.6.5     2025-04-23 [1] CRAN (R 4.5.0)
 codetools               0.2-20    2024-03-31 [1] CRAN (R 4.5.1)
 corrplot              * 0.95      2024-10-14 [1] CRAN (R 4.5.0)
 crayon                  1.5.3     2024-06-20 [1] CRAN (R 4.5.0)
 curl                    7.0.0     2025-08-19 [1] CRAN (R 4.5.1)
 DBI                     1.2.3     2024-06-02 [1] CRAN (R 4.5.0)
 dbplyr                * 2.5.1     2025-09-10 [1] CRAN (R 4.5.1)
 DelayedArray            0.36.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 DESeq2                * 1.50.2    2025-11-17 [1] Bioconductor 3.22 (R 4.5.2)
 devtools                2.4.6     2025-10-03 [1] CRAN (R 4.5.1)
 DEXSeq                * 1.56.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 digest                  0.6.39    2025-11-19 [1] CRAN (R 4.5.1)
 dplyr                 * 1.1.4     2023-11-17 [1] CRAN (R 4.5.0)
 edgeR                   4.8.1     2025-12-08 [1] Bioconductor 3.22 (R 4.5.2)
 ellipsis                0.3.2     2021-04-29 [1] CRAN (R 4.5.0)
 ensembldb               2.34.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 evaluate                1.0.5     2025-08-27 [1] CRAN (R 4.5.1)
 factoextra            * 1.0.7     2020-04-01 [1] CRAN (R 4.5.0)
 farver                  2.1.2     2024-05-13 [1] CRAN (R 4.5.0)
 fastmap                 1.2.0     2024-05-15 [1] CRAN (R 4.5.0)
 filelock                1.0.3     2023-12-11 [1] CRAN (R 4.5.0)
 forcats               * 1.0.1     2025-09-25 [1] CRAN (R 4.5.1)
 formatR                 1.14      2023-01-17 [1] CRAN (R 4.5.0)
 fs                      1.6.6     2025-04-12 [1] CRAN (R 4.5.0)
 futile.logger           1.4.3     2016-07-10 [1] CRAN (R 4.5.0)
 futile.options          1.0.1     2018-04-20 [1] CRAN (R 4.5.0)
 genefilter            * 1.92.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 geneplotter             1.88.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 generics              * 0.1.4     2025-05-09 [1] CRAN (R 4.5.0)
 GenomeInfoDb            1.46.2    2025-12-04 [1] Bioconductor 3.22 (R 4.5.2)
 GenomicAlignments       1.46.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 GenomicFeatures         1.62.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 GenomicRanges         * 1.62.1    2025-12-08 [1] Bioconductor 3.22 (R 4.5.2)
 ggfortify             * 0.4.19    2025-07-27 [1] CRAN (R 4.5.1)
 ggplot2               * 4.0.1     2025-11-14 [1] CRAN (R 4.5.1)
 ggrepel                 0.9.6     2024-09-07 [1] CRAN (R 4.5.0)
 glue                    1.8.0     2024-09-30 [1] CRAN (R 4.5.0)
 gridExtra               2.3       2017-09-09 [1] CRAN (R 4.5.0)
 gtable                  0.3.6     2024-10-25 [1] CRAN (R 4.5.0)
 hms                     1.1.4     2025-10-17 [1] CRAN (R 4.5.1)
 htmltools               0.5.9     2025-12-04 [1] CRAN (R 4.5.1)
 httr                    1.4.7     2023-08-15 [1] CRAN (R 4.5.0)
 httr2                   1.2.2     2025-12-08 [1] CRAN (R 4.5.1)
 hwriter                 1.3.2.1   2022-04-08 [1] CRAN (R 4.5.0)
 IRanges               * 2.44.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 IsoformSwitchAnalyzeR * 2.10.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 jquerylib               0.1.4     2021-04-26 [1] CRAN (R 4.5.0)
 jsonlite                2.0.0     2025-03-27 [1] CRAN (R 4.5.0)
 KEGGREST                1.50.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 knitr                 * 1.51      2025-12-20 [1] CRAN (R 4.5.1)
 lambda.r                1.2.4     2019-09-18 [1] CRAN (R 4.5.0)
 lattice                 0.22-7    2025-04-02 [1] CRAN (R 4.5.1)
 lazyeval                0.2.2     2019-03-15 [1] CRAN (R 4.5.0)
 lifecycle               1.0.4     2023-11-07 [1] CRAN (R 4.5.0)
 limma                 * 3.66.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 locfdr                  1.1-8     2015-07-15 [1] CRAN (R 4.5.0)
 locfit                  1.5-9.12  2025-03-05 [1] CRAN (R 4.5.0)
 lubridate             * 1.9.4     2024-12-08 [1] CRAN (R 4.5.0)
 magrittr                2.0.4     2025-09-12 [1] CRAN (R 4.5.1)
 Matrix                  1.7-4     2025-08-28 [1] CRAN (R 4.5.1)
 MatrixGenerics        * 1.22.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 matrixStats           * 1.5.0     2025-01-07 [1] CRAN (R 4.5.0)
 memoise                 2.0.1     2021-11-26 [1] CRAN (R 4.5.0)
 mgcv                  * 1.9-4     2025-11-07 [1] CRAN (R 4.5.1)
 nlme                  * 3.1-168   2025-03-31 [1] CRAN (R 4.5.1)
 otel                    0.2.0     2025-08-29 [1] CRAN (R 4.5.1)
 pbapply                 1.7-4     2025-07-20 [1] CRAN (R 4.5.1)
 pfamAnalyzeR          * 1.10.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 pillar                  1.11.1    2025-09-17 [1] CRAN (R 4.5.1)
 pkgbuild                1.4.8     2025-05-26 [1] CRAN (R 4.5.0)
 pkgconfig               2.0.3     2019-09-22 [1] CRAN (R 4.5.0)
 pkgload                 1.4.1     2025-09-23 [1] CRAN (R 4.5.1)
 plyr                    1.8.9     2023-10-02 [1] CRAN (R 4.5.0)
 png                     0.1-8     2022-11-29 [1] CRAN (R 4.5.0)
 prettyunits             1.2.0     2023-09-24 [1] CRAN (R 4.5.0)
 progress                1.2.3     2023-12-06 [1] CRAN (R 4.5.0)
 ProtGenerics            1.42.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 purrr                 * 1.2.0     2025-11-04 [1] CRAN (R 4.5.1)
 pwalign                 1.6.0     2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 R6                      2.6.1     2025-02-15 [1] CRAN (R 4.5.0)
 rappdirs                0.3.3     2021-01-31 [1] CRAN (R 4.5.0)
 RColorBrewer          * 1.1-3     2022-04-03 [1] CRAN (R 4.5.0)
 Rcpp                    1.1.0     2025-07-02 [1] CRAN (R 4.5.1)
 RCurl                   1.98-1.17 2025-03-22 [1] CRAN (R 4.5.0)
 readr                 * 2.1.6     2025-11-14 [1] CRAN (R 4.5.1)
 remotes                 2.5.0     2024-03-17 [1] CRAN (R 4.5.0)
 repr                    1.1.7     2024-03-22 [1] CRAN (R 4.5.0)
 reshape2              * 1.4.5     2025-11-12 [1] CRAN (R 4.5.1)
 restfulr                0.0.16    2025-06-27 [1] CRAN (R 4.5.1)
 rjson                   0.2.23    2024-09-16 [1] CRAN (R 4.5.0)
 rlang                   1.1.6     2025-04-11 [1] CRAN (R 4.5.0)
 rmarkdown               2.30      2025-09-28 [1] CRAN (R 4.5.1)
 Rsamtools               2.26.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 RSQLite                 2.4.5     2025-11-30 [1] CRAN (R 4.5.1)
 rstudioapi              0.17.1    2024-10-22 [1] CRAN (R 4.5.0)
 rtracklayer             1.70.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 S4Arrays                1.10.1    2025-12-01 [1] Bioconductor 3.22 (R 4.5.2)
 S4Vectors             * 0.48.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 S7                      0.2.1     2025-11-14 [1] CRAN (R 4.5.1)
 sass                    0.4.10    2025-04-11 [1] CRAN (R 4.5.0)
 satuRn                * 1.18.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 scales                * 1.4.0     2025-04-24 [1] CRAN (R 4.5.0)
 Seqinfo               * 1.0.0     2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 sessioninfo             1.2.3     2025-02-05 [1] CRAN (R 4.5.0)
 skimr                 * 2.2.2     2026-01-10 [1] CRAN (R 4.5.1)
 SparseArray             1.10.8    2025-12-18 [1] Bioconductor 3.22 (R 4.5.2)
 statmod                 1.5.1     2025-10-09 [1] CRAN (R 4.5.1)
 stringi                 1.8.7     2025-03-27 [1] CRAN (R 4.5.0)
 stringr               * 1.6.0     2025-11-04 [1] CRAN (R 4.5.1)
 SummarizedExperiment  * 1.40.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 survival                3.8-3     2024-12-17 [1] CRAN (R 4.5.1)
 sva                   * 3.58.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 tibble                * 3.3.0     2025-06-08 [1] CRAN (R 4.5.0)
 tidyr                 * 1.3.2     2025-12-19 [1] CRAN (R 4.5.1)
 tidyselect              1.2.1     2024-03-11 [1] CRAN (R 4.5.0)
 tidyverse             * 2.0.0     2023-02-22 [1] CRAN (R 4.5.0)
 timechange              0.3.0     2024-01-18 [1] CRAN (R 4.5.0)
 txdbmaker               1.6.2     2025-12-11 [1] Bioconductor 3.22 (R 4.5.2)
 tximeta                 1.28.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 tximport                1.38.1    2025-11-17 [1] Bioconductor 3.22 (R 4.5.2)
 tzdb                    0.5.0     2025-03-15 [1] CRAN (R 4.5.0)
 UCSC.utils              1.6.1     2025-12-11 [1] Bioconductor 3.22 (R 4.5.2)
 usethis                 3.2.1     2025-09-06 [1] CRAN (R 4.5.1)
 vctrs                   0.6.5     2023-12-01 [1] CRAN (R 4.5.0)
 VennDiagram             1.7.3     2022-04-12 [1] CRAN (R 4.5.0)
 withr                   3.0.2     2024-10-28 [1] CRAN (R 4.5.0)
 xfun                    0.55      2025-12-16 [1] CRAN (R 4.5.1)
 XML                     3.99-0.20 2025-11-08 [1] CRAN (R 4.5.1)
 xtable                  1.8-4     2019-04-21 [1] CRAN (R 4.5.0)
 XVector               * 0.50.0    2025-10-29 [1] Bioconductor 3.22 (R 4.5.1)
 yaml                    2.3.12    2025-12-10 [1] CRAN (R 4.5.1)

 [1] /Library/Frameworks/R.framework/Versions/4.5-x86_64/Resources/library
 * ── Packages attached to the search path.

──────────────────────────────────────────────────────────────────────────────