Criando abas dinamicamente com plotagens brilhantes, sem recriar as abas existentes

Gostaria de criar guias dinâmicas, onde cada vez que o usuário clica em um botão, uma nova guia é criada. Cada guia tem o mesmo conteúdo, com uma variedade de widgets que o usuário pode usar para selecionar quais conjuntos de dados serão plotados.

Atualmente, estou usando a soluçãoaqui criar dinamicamente minhas guias, mas com a alteração que lapply está chamando uma função que chama tabPanel e adiciona conteúdo às guias

`

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)
})

`

E os métodos de loops postadosaqui para criar os gráficos em cada guia.

No entanto, parece que, em vez de criar uma nova guia, as 2 soluções acima recriam todas as guias existentes. Portanto, se atualmente houver 10 guias abertas, todas as 10 guias serão recriadas. Infelizmente, isso também redefine todas as configurações do usuário em cada guia (além de diminuir a velocidade do aplicativo), e devem ser tomadas providências extras, como mostradoaqui , o que torna o aplicativo mais lento devido ao grande número de objetos de entrada que devem ser criados.

Eu vi uma solução para itens de menu que parece resolver esse problema simplesmente armazenando todos os itens de menu em uma lista e cada vez que um novo item de menu é gerado, ele é simplesmente adicionado à lista para que todos os outros itens existentes não sejam ' não precisa ser criado. É algo assim também possível para guias e gráficos de renderização?

Este é o 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)) 
               })

Se alguém puder me explicar o que menu_list <- list (menu_vals $ menu_list) está fazendo, por que o Rstudio diz que deve estar dentro de uma expressão reativa e por que uma nova lista chamada menu_vals é criada com menu_list = null, seria muito apreciada como bem :)

Editar: acho que consegui impedir que as plotagens fossem recriadas cada vez que uma nova guia é criada e também ignorar a necessidade de um número máximo de plotagens 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

                 })

No entanto, ainda não consigo descobrir como usar isso para criar guias. Eu tentei o mesmo método, mas não funcionou.

questionAnswers(2)

yourAnswerToTheQuestion