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.