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