微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。