I am trying to do something a little bit tricky and I am hoping that someone can help me.
I would like to add selectInput
inside a datatable. If I launch the app, I see that the inputs col_1
, col_2
.. are well connected to the datatable (you can switch to a, b or c)
BUT If I update the dataset (from iris
to mtcars
) the connection is lost between the inputs and the datatable. Now if you change a selectinput
the log doen't show the modification. How can I keep the links?
I made some test using shiny.bindAll()
and shiny.unbindAll()
without success.
Any Ideas?
Please have a look at the app:
library(shiny)
library(DT)
library(shinyjs)
library(purrr)
ui <- fluidPage(
selectInput("data","choose data",choices = c("iris","mtcars")),
DT::DTOutput("tableau"),
verbatimTextOutput("log")
)
server <- function(input, output, session) {
dataset <- reactive({
switch (input$data,
"iris" = iris,
"mtcars" = mtcars
)
})
output$tableau <- DT::renderDT({
col_names<-
seq_along(dataset()) %>%
map(~selectInput(
inputId = paste0("col_",.x),
label = NULL,
choices = c("a","b","c"))) %>%
map(as.character)
DT::datatable(dataset(),
options = list(ordering = FALSE,
preDrawCallback = JS("function() {
Shiny.unbindAll(this.api().table().node()); }"),
drawCallback = JS("function() { Shiny.bindAll(this.api().table().node());
}")
),
colnames = col_names,
escape = FALSE
)
})
output$log <- renderPrint({
lst <- reactiveValuesToList(input)
lst[order(names(lst))]
})
}
shinyApp(ui, server)
from Complex R Shiny input binding issue with datatable
No comments:
Post a Comment