为了简化这个例子,我只包含必要的代码来描述我遇到的问题。如果需要,我将包括一个完全可重复的例子,但我有一种预感,这个问题可以通过理论单独由有更多使用Shiny经验的人来解决。基本上,我在R中编写了一个Shiny应用程序,看起来像这样:
ui.R
plotOutput(outputId = 'heatmap1', height = "800px")
uiOutput('selectStrains')
uiOutput('selectRegions')
server.R
output$selectStrains = renderUI({
checkboxGroupInput(inputId='strains',
choices=sort(colnames(mousedata)),
selected=colnames(mousedata))
})
output$selectRegions = renderUI({
checkboxGroupInput(inputId='regions',
choices=sort(rownames(mousedata)),
selected=rownames(mousedata))
})
# more code
output$heatmap1 = renderPlot({
input$recalculate
mousedatamat = as.matrix(mousedata[isolate(input$strains), isolate(input$regions)])
heatmap.2(mousedatamat)
})
问题:
我的问题是,在server.R
中,首次加载应用时,input$strains
和input$regions
都为NULL。因此,mousedatamat
中的server.R
将为0x0矩阵,并且应用程序首页上的热图将为空,这会导致用户体验非常糟糕。我不知道在启动应用程序时ui.R
和server.R
文件如何交互,所以我发现很难调试。要使绘图显示,我需要单击重新计算按钮(input$recalculate
),或调整窗口大小(但由于某种原因仅在水平维度中)。
为了给混音添加更多神秘感,我在第2页上有相同的热图图(我正在使用navbarPage布局),当我导航到该标签时,它显示在应用程序加载上!它是完全相同的代码,只是将其分配给output$heatmap2
。当我导航回第1页时,output$heatmap1
仍然无法显示。
我已尝试将uiOutput
的电话放在plotOutput
ui.R
以上,但我不知道如何解决此问题的主要原因是因为我没有了解应用程序启动时的执行流程。关于这个主题的任何想法或信息?