Adicionar e remover dinamicamente elementos uiOutput com base no índice usando actionButtons

Estou tentando adicionar e removeruiOutput elementos usando um índice para acompanhar cada elemento individual. Há umactionButton para adicionar e elemento à lista e umx para cada elemento que remove o item selecionado, como na imagem abaixo:

Estou usando um único arquivo .Rmd que inclui ambosui eserver código. Minha solução atual (com a qual não posso produzir a funcionalidade desejada mostrada acima - basicamente não faz nada) é a seguinte:

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

})

Quando eu colocouiOutput e o botão removerobserveEvent fora do botão adicionarobserveEvent o código funciona, mas preciso ter uma instrução separada por índice, da seguinte maneira:

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

Eu não poderia fazer um loop for oulapply ligar para o trabalho (parece um problema de escopo que eu não entendo). Como o número de elementos não é conhecido antecipadamente, os valores não funcionarão para mim. Alguém sabe como fazer isso funcionar? Obrigado.

questionAnswers(2)

yourAnswerToTheQuestion