Brilhante - filtros de dados dinâmicos usando insertUI
Eu sou novo no brilhante e estava tentando escrever um aplicativo no qual o usuário pode adicionar dinamicamente filtros de dados (veja o código abaixo). Eu pensei que insertUI e remover interface do usuário são muito legais para esse fim. No entanto, tenho vários problemas:
1) I cannot address dynamically generates input$ids (see filterId in the code, l. 36 and l. 58)
2) in updateCheckboxGroupInput (l. 62) checkboxes are not preselected.
3) I cannot select data rows using which() (l. 74)
4) The checkboxes are not displayed inside the column, but spread over the whole page.
Eu aprecio muito todas as dicas.
Obrigado Jordi
aqui o código:
library(shiny)
rowvalues <- function(col,data) {
as.list(unique(data[col]))
}
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fluidRow(
column(6, actionButton('addFilter', 'Add filter')),
column(6, actionButton('removeFilter', 'Remove filter')),
offset = 6
),
tags$hr(),
tags$div(id = 'placeholderAddRemFilt'),
tags$div(id = 'placeholderFilter'),
width = 4 # sidebar
),
mainPanel(
tableOutput("data")
)
)
)
server <- function(input, output,session) {
filter <- character(0)
observeEvent(input$addFilter, {
add <- input$addFilter
filterId <- paste0('Filter', add)
headers <- names(mtcars)
insertUI(
selector = '#placeholderFilter',
ui = tags$div(
# selectInput(filterId, label = paste0("Filter ",add), # does not work
selectInput("ColFilter", label = paste0("Filter ",add),
choices = as.list(headers),
selected = 1),
checkboxGroupInput("RowFilter", label = "Select variable values",
choices = NULL, selected = NULL,
inline = TRUE, width = 4000),
id = filterId
)
)
filter <<- c(filter,filterId)
})
observeEvent(input$removeFilter, {
removeUI(
## pass in appropriate div id
selector = paste0('#', filter[length(filter)])
)
filter <<- filter[-length(filter)]
})
# observeEvent(input$filterId, { # does ntót work
observeEvent(input$ColFilter, {
col <- input$ColFilter
values <- as.list(unique(mtcars[col]))[[1]]
updateCheckboxGroupInput(session,"RowFilter", label = "Select variable values",
choices = values, selected = values,
inline = TRUE)
})
output$data <- renderTable({
col <- input$ColFilter
rows <- input$RowFilter
print(c("selected col: ",col))
print(c("selected rows: ",as.vector(rows)))
if(is.null(col)) mtcars
else {
mtcars[which(mtcars$col != rows),]
}
})
}
shinyApp(ui = ui, server = server)