Agregue y elimine dinámicamente elementos uiOutput basados en índice usando actionButtons

Estoy tratando de agregar y eliminaruiOutput elementos que utilizan un índice para realizar un seguimiento de cada elemento individual. Hay unactionButton para agregar un elemento a la lista, y unx botón para cada elemento que elimina el elemento seleccionado, como en la imagen a continuación:

Estoy usando un solo archivo .Rmd que incluye ambosui yserver código. Mi solución actual (con la que no puedo producir la funcionalidad deseada que se muestra arriba --- básicamente no hace nada) es la siguiente:

actionButton("addFilter", "Add filter", icon=icon("plus", class=NULL, lib="font-awesome"))

i <- 0

observeEvent(input$addFilter, {
  i <<- i + 1
  uiOutput(paste("filterPage",i,sep=""))

  output[[paste("filterPage",i,sep="")]] = renderUI({
    fluidPage(
      fluidRow(
        column(6, selectInput(paste("filteringFactor",i,sep=""), "Choose factor to filter by:",
                              choices=c("factor A", "factor B", "factor C"), selected="factor B",
                              width="100%")),
        column(6, actionButton(paste("removeFactor",i,sep=""), "",
                               icon=icon("times", class = NULL, lib = "font-awesome")))
      )
    )
  })

  observeEvent(input[[paste("removeFactor",i,sep="")]], {
    output[[paste("filterPage",i,sep="")]] = renderUI({})
  })

})

Cuando pongouiOutput y el botón quitarobserveEvent fuera del botón de agregarobserveEvent el código funciona, pero necesito tener una declaración separada por índice, de la siguiente manera:

uiOutput(paste("filterPage",1,sep=""))
uiOutput(paste("filterPage",2,sep=""))
uiOutput(paste("filterPage",3,sep=""))
uiOutput(paste("filterPage",4,sep=""))

actionButton("addFilter", "Add filter", icon=icon("plus", class=NULL, lib="font-awesome"))

i <- 0

observeEvent(input$addFilter, {
  i <<- i + 1
  output[[paste("filterPage",i,sep="")]] = renderUI({
    fluidPage(
      fluidRow(
        column(6, selectInput(paste("filteringFactor",i,sep=""), "Choose factor to filter by:",
                              choices=c("factor A", "factor B", "factor C"), selected="factor B",
                              width="100%")),
        column(6, actionButton(paste("removeFactor",i,sep=""), "",
                               icon=icon("times", class = NULL, lib = "font-awesome")))
      )
    )
  })
})

observeEvent(input[[paste("removeFactor",1,sep="")]], {
  output[[paste("filterPage",1,sep="")]] = renderUI({})
})
observeEvent(input[[paste("removeFactor",2,sep="")]], {
  output[[paste("filterPage",2,sep="")]] = renderUI({})
})
observeEvent(input[[paste("removeFactor",3,sep="")]], {
  output[[paste("filterPage",3,sep="")]] = renderUI({})
})
observeEvent(input[[paste("removeFactor",4,sep="")]], {
  output[[paste("filterPage",4,sep="")]] = renderUI({})
})

No pude hacer un bucle for olapply llamar al trabajo (parece un problema de alcance que no entiendo). Como no se conoce de antemano el número de elementos, los valores no funcionarán para mí. ¿Alguien sabe cómo hacer que esto funcione? Gracias.

Respuestas a la pregunta(2)

Su respuesta a la pregunta