Я пытаюсь сделать что-то немного сложнее, и я надеюсь, что кто-то может мне помочь.
Я хотел бы добавить selectInput
внутри datatable. Если я запустил приложение, я вижу, что входы col_1
, col_2
.. хорошо связаны с данными (вы можете переключиться на a, b или c)
НО Если я обновляю набор данных (от iris
до mtcars
), соединение теряется между входами и данными. Теперь, если вы измените selectinput
журнал не покажет модификацию. Как я могу сохранить ссылки?
Я сделал несколько тестов с помощью shiny.bindAll()
и shiny.unbindAll()
без успеха.
Есть идеи?
Посмотрите приложение:
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)