问题描述
我在 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 (将#修改为@)