Условный renderDataTable - PullRequest
       7

Условный renderDataTable

0 голосов
/ 27 февраля 2020

В приложении есть две кнопки действий, "tasto.a" и "tasto.b", если я нажимаю кнопку "key.a", data.frame "a" назначается tab.SDO (), если я нажмите кнопку «key.a». data.frame «a» назначается tab.SDO (), чтобы выбранный data.frame отображался в пользовательском интерфейсе. Проблема в том, что выполняется только второе назначение в списке (tab.SDO <- eventReactive (input $ key.b, {b})), даже если я нажимаю клавишу «key.b». Является ли этот тип «условного» назначения правильным или я делаю некоторые ошибки? </p>

require(shiny)

a <- data.frame(a.x = c(1,3,4,5,1,2), a.y = c("A", "A", "B", "B", "C", "C"))
b <- data.frame(b.x = c(21,33,44,52,13,27), b.y = c("D", "D", "E", "E", "F", "F"))


#### UI ####
ui <- navbarPage(title = "FLUSSI SANITARI",
                 theme = shinytheme("cerulean"),     
                 #### Schede di dimissione ospedaliera ####
                 tabPanel(title = "prova", 
                          sidebarLayout(
                            sidebarPanel(
                              actionButton("tasto.a", "a"),
                              actionButton("tasto.b", "b")
                            ),
                            mainPanel(
                              div(DT::dataTableOutput("tabella.SDO"), style = "font-size:80%")
                            )
                          )

                 )
)

#### SERVER ####
server <- function(input, output, session) {

  tab.SDO <- eventReactive(input$tasto.a, {a})
  tab.SDO <- eventReactive(input$tasto.b, {b})


  output$tabella.SDO <- DT::renderDataTable({tab.SDO()}, rownames = FALSE,
                                            options = list(pageLength = 25)
  )


}

# Run the application 
shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 27 февраля 2020

Вы можете использовать реактивное значение и некоторые observeEvent:

server <- function(input, output, session) {

  tab.SDO <- reactiveVal(a)
  observeEvent(input$tasto.a, {
    tab.SDO(a)
  })
  observeEvent(input$tasto.b, {
    tab.SDO(b)
  })

  output$tabella.SDO <- DT::renderDataTable({tab.SDO()}, rownames = FALSE,
                                            options = list(pageLength = 25)
  )

}
...