«Табличная панель» создается на основе прочитанных данных, а «Табличная панель» создается с использованием значения 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)