ridgeplot报错:Error in ans[ypos] <- rep(yes, length.out = len)[ypos] : replacement has ...

报错信息:
Error in ans[ypos] <- rep(yes, length.out = len)[ypos] :
replacement has length zero
In addition: Warning message:
In rep(yes, length.out = len) : 'x' is NULL so the result will be NULL


报错情况与代码

在进行GSEA时,使用ridgeplot可视化gseaResult发现报错,无法出图

###前面省略
##### gsea富集 ####
KEGG_kk <- gseKEGG(geneList     = geneList,
                   organism     = organism, #人hsa 鼠mmu
                   pvalueCutoff = 0.25)  #实际为padj阈值可调整 
KEGG_kk <- DOSE::setReadable(KEGG_kk, 
                             OrgDb=OrgDb,
                             keyType='ENTREZID')#转化id   

ridgeplot(KEGG_kk,
          showCategory = 30,
          fill = "p.adjust",
          core_enrichment = T,
          label_format = 30,
          orderBy = "NES",
          decreasing = F)

信息查找与报错排查

类似的报错有:
报错:Error in ans[ypos] <- rep(yes, length.out = len)[ypos] : replacement has length zero - 橙子牛奶糖 - 博客园 (cnblogs.com)

然而,这个解答对于我的问题并没有什么用。。。我运行dotplot或者其他函数都没有任何问题,唯独使用ridgeplot会报错,尝试将阈值调0.99也解决不了问题,还是自己一步步摸索吧。。。

一个个参数进行调整,发现当 core_enrichment = F 时,竟然可以出图了:




于是去解了一下参数 core_enrichment 的含义:whether only using core_enriched genes,既然使用core_enrichment会报错,那必然错误是出在了数据的core_enrichment这一信息上。再结合ridgeplot图含义:展示富集通路的核心富集基因的表达分布,x轴为富集通路的核心富集基因表达变化的log2倍。
猜想:函数识别不了核心富集基因,于是无法画图——难道是核心富集基因有缺失值或转换id后无法被识别?

最终解决办法

需要使用未经id转化(基因ID为entrez)的gseaResult进行ridgeplot画图,修改后代码如下:

###前面省略
##### gsea富集 ####
KEGG_kk_entrez <- gseKEGG(geneList     = geneList,
                   organism     = organism, #人hsa 鼠mmu
                   pvalueCutoff = 0.25)  #实际为padj阈值可调整 
KEGG_kk <- DOSE::setReadable(KEGG_kk, 
                             OrgDb=OrgDb,
                             keyType='ENTREZID')#转化id   

ridgeplot(KEGG_kk_entrez,
          showCategory = 30,
          fill = "p.adjust",
          core_enrichment = T,
          label_format = 30,
          orderBy = "NES",
          decreasing = F)

成功解决问题:


image.png

你可能感兴趣的:(ridgeplot报错:Error in ans[ypos] <- rep(yes, length.out = len)[ypos] : replacement has ...)