@@ -21,11 +21,15 @@ message("Running enrichment analysis...")
2121sig_genes <- res_df %> %
2222 filter(padj < 0.05 , abs(log2FoldChange ) > 1 ) %> %
2323 pull(gene )
24+ sig_genes <- unique(sig_genes )
2425
2526n_up <- sum(res_df $ padj < 0.05 & res_df $ log2FoldChange > 1 , na.rm = TRUE )
2627n_down <- sum(res_df $ padj < 0.05 & res_df $ log2FoldChange < - 1 , na.rm = TRUE )
2728
2829message(length(sig_genes ), " DE genes (" , n_up , " up, " , n_down , " down)" )
30+ if (length(sig_genes ) == 0 ) {
31+ stop(" No DE genes passed padj/log2FC thresholds; enrichment cannot proceed." )
32+ }
2933
3034gene_map <- tryCatch({
3135 bitr(sig_genes , fromType = " ENSEMBL" ,
@@ -55,8 +59,8 @@ go_bp <- enrichGO(
5559)
5660
5761go_df <- as.data.frame(go_bp )
62+ write.csv(go_df , " results/tables/go_biological_process.csv" , row.names = FALSE )
5863if (nrow(go_df ) > 0 ) {
59- write.csv(go_df , " results/tables/go_biological_process.csv" , row.names = FALSE )
6064 message(" " , nrow(go_df ), " GO terms enriched" )
6165
6266 p1 <- dotplot(go_bp , showCategory = 20 , font.size = 9 ) +
@@ -65,26 +69,35 @@ if (nrow(go_df) > 0) {
6569 ggsave(" results/figures/go_dotplot.png" , p1 , width = 10 , height = 9 , dpi = 300 )
6670}
6771
68- kegg <- enrichKEGG(
69- gene = gene_map $ ENTREZID ,
70- organism = " hsa" ,
71- pAdjustMethod = " BH" ,
72- pvalueCutoff = 0.05 ,
73- qvalueCutoff = 0.1
72+ kegg <- tryCatch(
73+ enrichKEGG(
74+ gene = gene_map $ ENTREZID ,
75+ organism = " hsa" ,
76+ pAdjustMethod = " BH" ,
77+ pvalueCutoff = 0.05 ,
78+ qvalueCutoff = 0.1
79+ ),
80+ error = function (e ) {
81+ warning(" KEGG enrichment unavailable (network/service issue): " , conditionMessage(e ))
82+ NULL
83+ }
7484)
7585
76- kegg_df <- as.data.frame(kegg )
77- if (nrow(kegg_df ) > 0 ) {
78- kegg_read <- setReadable(kegg , OrgDb = org.Hs.eg.db , keyType = " ENTREZID" )
79- kegg_df <- as.data.frame(kegg_read )
80- write.csv(kegg_df , " results/tables/kegg_pathways.csv" , row.names = FALSE )
81- message(" " , nrow(kegg_df ), " KEGG pathways enriched" )
82-
83- p2 <- dotplot(kegg_read , showCategory = 20 , font.size = 9 ) +
84- ggtitle(" KEGG Pathway Enrichment" ) +
85- theme(plot.title = element_text(face = " bold" , hjust = 0.5 ))
86- ggsave(" results/figures/kegg_dotplot.png" , p2 , width = 10 , height = 9 , dpi = 300 )
86+ kegg_df <- data.frame ()
87+ if (! is.null(kegg )) {
88+ kegg_df <- as.data.frame(kegg )
89+ if (nrow(kegg_df ) > 0 ) {
90+ kegg_read <- setReadable(kegg , OrgDb = org.Hs.eg.db , keyType = " ENTREZID" )
91+ kegg_df <- as.data.frame(kegg_read )
92+ message(" " , nrow(kegg_df ), " KEGG pathways enriched" )
93+
94+ p2 <- dotplot(kegg_read , showCategory = 20 , font.size = 9 ) +
95+ ggtitle(" KEGG Pathway Enrichment" ) +
96+ theme(plot.title = element_text(face = " bold" , hjust = 0.5 ))
97+ ggsave(" results/figures/kegg_dotplot.png" , p2 , width = 10 , height = 9 , dpi = 300 )
98+ }
8799}
100+ write.csv(kegg_df , " results/tables/kegg_pathways.csv" , row.names = FALSE )
88101
89102if (nrow(go_df ) > 0 ) {
90103 message(" \n Top GO terms:" )
@@ -96,4 +109,4 @@ if (nrow(kegg_df) > 0) {
96109 print(head(kegg_df [, c(" Description" , " p.adjust" , " Count" )], 5 ), row.names = FALSE )
97110}
98111
99- message(" \n Enrichment analysis complete" )
112+ message(" \n Enrichment analysis complete" )
0 commit comments