Создание динамических c панелей - PullRequest
0 голосов
/ 06 марта 2020

«Табличная панель» создается на основе прочитанных данных, а «Табличная панель» создается с использованием значения numericInput в «Табличной панели». Однако в текущем коде изменение numericInput для создания «панели вкладок» приведет к сбросу других входов (таких как selectInput), содержащихся в «панели вкладок». Есть ли решение?

library(shiny)
library(shinydashboard)
library(dplyr)

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

    items <-  reactive(iris$Species %>% unique())

    observeEvent(input$action_1,{
      lapply(1:length(items()), function(i){
        assign(paste0("num_tabpanel_", i), 
               reactiveVal(3), 
               env=.GlobalEnv)
      })
    })

    observeEvent(input$action_1,{
      lapply(1:length(items()), function(i){
        observeEvent(input[[paste0("action_make_tab_", i)]],{
          get(paste0("num_tabpanel_", i))(input[[paste0("num_tabpanel_", i)]])
        })
      })
    })

    observeEvent(input$action_1,{
      output$ui_tag <- renderUI({
        tagList(
          do.call(tabsetPanel, lapply(1:length(items()), function(i){
            tabPanel(
              title = items()[i], #  %>% as.character()
              tags$br(),
              selectInput(paste0("select_", i),
                          label = "select",
                          choices = list("one" = 1, "two" = 2, "three" = 3),
                          selected = 1),
              numericInput(paste0("num_tabpanel_", i),
                           label = "tabpanel_number",
                           value = get(paste0("num_tabpanel_", i))(),
                           min = 1),
              actionButton(inputId = paste0("action_make_tab_", i),
                           label = "make_tabpanel_2"),
              tags$br(),tags$br(),
              do.call(tabsetPanel, lapply(1:get(paste0("num_tabpanel_", i))(), function(j){
                tabPanel(
                  title = j,
                  selectInput(paste0("select_tab_", i),
                              label = "select",
                              choices = list("one" = 1, "two" = 2, "three" = 3),
                              selected = 1),
                )
              }))
            )
          }))
        )
      })
    })
  })

ui <- 
  shinyUI(
    dashboardPage(
      dashboardHeader(title = "dynamic_tabpanel"),
      dashboardSidebar(),
      dashboardBody(
        actionButton(inputId = "action_1",
                     label = "make_tabpanel_1"),
        uiOutput("ui_tag")
      ),
    )
  )

options(shiny.reactlog = TRUE)
shinyApp(ui = ui, server = server)
...