在DataTable R Shiny中嵌入Checkbox

时间:2017-10-11 03:28:56

标签: r datatable shiny

此问题已得到解决,但对于包含多行的数据表却无法解决。

回答here小数据表。

此示例应用程序运行正常,但您会注意到如果您将要显示的行数更改为大数(10,000),则需要很长时间才能加载。

我在for函数的shinyInput()循环中发现了这个问题。这就是它需要这么长时间的原因。

有解决方法吗?如何更快地生成10,000个复选框变量?

library(DT)
runApp(
  list(ui = fluidPage(numericInput(inputId = 'n', value = 100, label = 'No. of rows'), DT::dataTableOutput('x1'), verbatimTextOutput('x2')),
       server = function(input, output) {
         # create a character vector of shiny inputs
         shinyInput = function(FUN, len, id, ...) {
           inputs = character(len)
           for (i in seq_len(len)) {
             inputs[i] = as.character(FUN(paste0(id, i), label = NULL, ...))
           }
           inputs
         }

         # obtain the values of inputs
         shinyValue = function(id, len) {
           unlist(lapply(seq_len(len), function(i) {
             value = input[[paste0(id, i)]]
             if (is.null(value)) NA else value
           }))
         }

         # a sample data frame
         res = reactive({

           data.frame(
             v1 = shinyInput(numericInput, input$n, 'v1_', value = 0),
             v2 = shinyInput(checkboxInput, input$n, 'v2_', value = TRUE),
             v3 = rnorm(input$n),
             v4 = sample(LETTERS, input$n, TRUE),
             stringsAsFactors = FALSE
           )
         })

         # render the table containing shiny inputs
         output$x1 = DT::renderDataTable(
           res(), server = FALSE, escape = FALSE, selection = 'none', options = list(
             preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
             drawCallback = JS('function() { Shiny.bindAll(this.api().table().node()); } ')
           )
         )
         # print the values of inputs
         output$x2 = renderPrint({
           data.frame(v1 = shinyValue('v1_', input$n), v2 = shinyValue('v2_', input$n))
         })
       }
       ),
  launch.browser = T
)

0 个答案:

没有答案