Creación dinámica de pestañas con trazados brillantes sin volver a crear pestañas existentes

Me gustaría crear pestañas dinámicas, donde cada vez que el usuario haga clic en un botón, se creará una nueva pestaña. Cada pestaña tiene el mismo contenido, con una variedad de widgets que el usuario puede usar para seleccionar qué conjuntos de datos se trazarán.

Actualmente estoy usando la soluciónaquí para crear dinámicamente mis pestañas, pero con el cambio que se está ejecutando, se llama a una función que llama a tabPanel y agrega contenido a las pestañas

`

renderUI({
some_data <- # Dataframe that data is extracted goes here
createTabs <- function(tabNum, some_data)
    {
      tabPanel(title = paste("Map", tabNum, sep=" "), 
               fluidRow(
                 column(
                   width = 3,
                   wellPanel(
                     #widgets are added here
    }
 mTabs <- lapply(0:input$map, createTabs, some_data)
 do.call(tabsetPanel, mTabs)
})

`

Y los métodos de for bucles publicadosaquí para crear las parcelas en cada pestaña.

Sin embargo, parece que en lugar de crear una nueva pestaña, las dos soluciones anteriores vuelven a crear todas las pestañas existentes. Entonces, si actualmente hay 10 pestañas abiertas, todas las 10 pestañas se vuelven a crear. Desafortunadamente, esto también restablece todas las configuraciones de usuario en cada pestaña (además de ralentizar la aplicación), y se deben tomar disposiciones adicionales como se muestraaquí , lo que ralentiza aún más la aplicación debido a la gran cantidad de objetos de entrada que se deben crear.

Vi una solución para los elementos de menú que parece resolver este problema simplemente almacenando todos los elementos de menú en una lista, y cada vez que se genera un nuevo elemento de menú, simplemente se agrega a la lista para que todos los demás elementos existentes no No es necesario ser creado. ¿Es posible algo así para pestañas y gráficos de representación también?

Este es el código:

 newTabs <- renderMenu({
    menu_list <- list(
      menu_vals$menu_list)
    sidebarMenu(.list = menu_list)
  })

  menu_vals = reactiveValues(menu_list = NULL)
  observeEvent(eventExpr = input$placeholder,
               handlerExpr = {
                 menu_vals$menu_list[[input$placeholder]] <- menuSubItem(paste("Saved Simulation", length(menu_vals$menu_list) + 1, sep = " "),
                                                                                    tabName = paste("saved_sim", length(menu_vals$menu_list) + 1)) 
               })

Si alguien puede explicarme qué está haciendo menu_list <- list (menu_vals $ menu_list), por qué Rstudio dice que debe estar dentro de una expresión reactiva, y por qué se crea una nueva lista llamada menu_vals con menu_list = null, sería muy apreciado como bien :)

Editar: creo que pude evitar que las tramas se vuelvan a crear cada vez que se crea una nueva pestaña y también evite la necesidad de un número máximo de parcelas usando

observeEvent(eventExpr = input$map,
                 handlerExpr = {
                   output[[paste0("outputComparePlot",simNum,"-",input$map)]] <- outputComparePlot(sessionEnv, config, react, input, simNum, input$map) #This function contains the call to renderPlot

                 })

Sin embargo, todavía no puedo entender cómo usar esto para crear pestañas. Intenté el mismo método pero no funcionó.

Respuestas a la pregunta(2)

Su respuesta a la pregunta