Shiny Dashboard:无需单击侧边栏选项卡即可将对象添加到输入列表

问题描述

我在 shiny 中有一个 R 应用程序,它使用 shinydashboard 包创建一个侧边栏中带有三个选项卡的仪表板。前两个选项卡各显示一个表格(使用 rhandsontable 创建)。第三个选项卡也显示一个表,但它是根据选项卡 1 和 2 中的表计算的。如果您在单击选项卡 3 之前单击选项卡 1 和选项卡 2,则下面的简单示例有效。如果您启动应用程序并单击选项卡3 直接(即跳过选项卡 2),应用程序将崩溃,因为 Table2 尚未添加input 列表中。

有没有办法将 Table2 添加input 列表中,而无需点击标签 2?

PS:我知道,在下面的简单示例中,还有其他方法可以获得所需的输出。我的问题特别是关于何时将对象添加input 列表的时间,以及我是否/如何能够改变这一点。

library(shiny)
library(shinydashboard)
library(rhandsontable)

shinyApp(
  ui = shinyUI(
      dashboardPage(
        dashboardHeader(title = "Example"),dashboardSidebar(sidebarMenu(id = 'tabs',menuItem("Tab1",tabName = 'Tab1'),menuItem("Tab2",tabName = 'Tab2'),menuItem("Tab3",tabName = 'Tab3'))),dashboardBody(tabItems(tabItem(tabName = "Tab1",rHandsontableOutput("Table1")),tabItem(tabName = "Tab2",rHandsontableOutput("Table2")),tabItem(tabName = "Tab3",rHandsontableOutput("Table3"))))
      )
    ),server = function(input,output){
    
    output$Table1 <- renderRHandsontable(rhandsontable(data.frame(A=rnorm(10),B=rnorm(10))))
    output$Table2 <- renderRHandsontable(rhandsontable(data.frame(A=rnorm(10),B=rnorm(10))))
    
    observeEvent(input$tabs,{
      if(input$tabs=="Tab3"){
        print(names(input)) # only contains Table2 if I click on its tab in the sidebar
        table1 <- hot_to_r(input$Table1)
        table2 <- hot_to_r(input$Table2) # fails if I have not clicked on Tab2
        output$Table3 <- renderRHandsontable(rhandsontable(table1+table2))
      }
    })
  }
)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)