So firstly, I'm completely aware that this type of question has been asked multiple times (I know this since I've been scrolling over these type of questions for the past 2 days), but I'm actually more interested in knowing the reasons as to why some people prefer 

I've performed differential expression analysis using DESeq2 and I want to see which Gene ontology terms, KEGG pathway terms etc are enriched in my data set. I've initially tried using clusterProfileR, but I keep getting 3 enriched terms for all my differentially expressed genes using ``enrichGO()``. I also know that some input in clusterProfileR requires you to put logFC values, so I wasn't sure if that was for ALL the genes analysed, or just the differentially expressed genes. 

I've also used goseq but my main issue with that is the GO terms are too broad.

I also only have about 300 DEGs, so I'm not really sure if this sort of analysis is best performed when you have a myriad of DEGs, or can be done with a small number. 

Anyway, looking forward to hearing people's responses :) 
I'm a big user of `GOseq`, which allows to control for the fact that longer and more highly expressed genes are more likely to be found to be differential, if long or highly expressed genes are not evenly distributed between pathways/categories, then this can bias your enriched pathways. 

I also like the `GSEA`-like algorithms, because you do not have to set an artificial limit on what you consider significant. The version of this where you rank on significance suffers from the same gene-length bias that traditional GO tests suffer, but this may be lessened by ranking on some suitably strunken logFC metric. `cameraPR` from limma is a good example of this. 

Finally we've used `SPIA` before, which is a pathway enrichment tool that takes the topology of the network into account. Its a great idea, let down by the quality of the pathway annotations it runs on. 