Если вы запустите следующий код в RStudio, он правильно отображает два графика, но если вы сделаете небольшое изменение (подробности ниже), он больше не будет отображать второй график.
(Обратите внимание, что examplePathways
и exampleRanks
предоставляются пакетом fgsea, поэтому следующий код должен выполняться как есть.)
library(fgsea)
library(dplyr)
library(ggplot2)
library(shiny)
ui <- fluidPage(
plotOutput("gseaPlot"),
plotOutput("gseaEnrichment")
)
runAnalysis <- function() {
gseaResult <- fgsea(pathways = examplePathways, stats = exampleRanks, nperm = 10)
topPathways <- gseaResult[NES > 0][head(order(desc(NES)), n = 10), pathway]
topPathwayUp <- topPathways[[1]]
gseaEnrichment <- plotEnrichment(examplePathways[[topPathwayUp]], exampleRanks)
gseaPlot <- plotGseaTable(examplePathways[topPathways], exampleRanks, gseaResult)
list(gseaEnrichment = gseaEnrichment, gseaPlot = gseaPlot)
}
server <- function(input, output, session) {
theAnalysis <- runAnalysis()
output$gseaEnrichment <- renderPlot({
theAnalysis$gseaEnrichment
})
output$gseaPlot <- renderPlot({
runAnalysis()$gseaPlot
})
}
shinyApp(ui = ui, server = server)
Небольшое изменение заключается в том, что если я изменю второй renderPlot на использование theAnalysis
вместо runAnalysis()
вот так:
server <- function(input, output, session) {
theAnalysis <- runAnalysis()
output$gseaEnrichment <- renderPlot({
theAnalysis$gseaEnrichment
})
output$gseaPlot <- renderPlot({
theAnalysis$gseaPlot
})
}
затем второй график неожиданно появляется в окне просмотра RStudio, а не в браузере.
Что здесь происходит, чтобы вызвать такое поведение, и как это можно сделатьЯ исправляю это, не прибегая к запуску runAnalysis()
дважды?
ОБНОВЛЕНИЕ: На самом деле, следующее показывает проблему еще проще и не включает Shiny.Если я запускаю следующий код, график отображается в программе просмотра графиков RStudio, даже если он был сохранен в переменной (но это не относится к plotEnrichment):
library(dplyr)
library(fgsea)
library(ggplot2)
gseaResult <- fgsea(pathways = examplePathways, stats = exampleRanks, nperm = 10)
topPathways <- gseaResult[NES > 0][head(order(desc(NES)), n = 10), pathway]
gseaPlot <- plotGseaTable(examplePathways[topPathways], exampleRanks, gseaResult)
UPDATE: очевидно, это такне случается с fgsea версии 1.6 (я использую версию 1.8), поэтому это может быть ошибкой в fgsea, поэтому я представил проблему с fgsea.Но я приветствую ответы, если кто-то может увидеть проблему или есть обходной путь.