预先选择闪亮的动态DT行

时间:2017-02-06 21:01:13

标签: r shiny dt

这个问题是this的动态版本。

我在闪亮的应用程序中有一个DT,在初始化时可能是空的。我想预先选择DT中的所有行。我的第一次尝试是这样的:

library(shiny)
library(DT)
shinyApp(
  ui = fluidPage(
    fluidRow(
      radioButtons("select", "", c("none", "iris")),
      DT::dataTableOutput('x1')
    )
  ),
  server = function(input, output, session) {
    data <- reactive({
      if (input$select == "none") {
        return(NULL)
      } else if (input$select == "iris"){
        return(iris)
      }
    })
    output$x1 = DT::renderDataTable(
      data(), server = FALSE,
      selection = list(mode = 'multiple', selected = seq_len(nrow(data())))
    )
  }
)

它选择正确,但开头有Warning: Error in seq_len: argument must be coercible to non-negative integer错误。我认为这是因为seq_len无法接受NULL输入。有趣的是,在初始化之后,来回切换不会产生新的错误。

我尝试使用此版本为行向量使用反应值,空输入为空结果:

library(shiny)
library(DT)
shinyApp(
  ui = fluidPage(
    fluidRow(
      radioButtons("select", "", c("none", "iris")),
      DT::dataTableOutput('x1')
    )
  ),
  server = function(input, output, session) {
    data <- reactive({
      if (input$select == "none") {
        return(NULL)
      } else if (input$select == "iris"){
        return(iris)
      }
    })
    all_rows <- reactive({
      df <- data()
      if (is.null(df)) {
        return(seq_len(0))
      } else {
        return(seq_len(nrow(df)))
      }
    })
    output$x1 = DT::renderDataTable(
      data(), server = FALSE,
      selection = list(mode = 'multiple', selected = all_rows()))
  }
)

然而,这不起作用。我尝试了另一个版本,它使用了修改后的seq_len但它也不起作用。

library(shiny)
library(DT)
seq_len_null_check <- function(len){
  if (is.null(len)){
    return(integer(0))
  } else {
    return(seq_len(len))
  }
}
shinyApp(
  ui = fluidPage(
    fluidRow(
      radioButtons("select", "", c("none", "iris")),
      DT::dataTableOutput('x1')
    )
  ),
  server = function(input, output, session) {
    data <- reactive({
      if (input$select == "none") {
        return(NULL)
      } else if (input$select == "iris"){
        return(iris)
      }
    })
    output$x1 = DT::renderDataTable(
      data(), server = FALSE,
      selection = list(mode = 'multiple', selected = seq_len_null_check(nrow(data())))
    )
  }
)

如何删除第一个版本中的错误,或者使第2版,第3版有效?

1 个答案:

答案 0 :(得分:5)

要允许对所选评估进行回应,您需要在$(document).ready(function(){ $(".tokenizationSelect2").select2({ placeholder: "Your favourite car", //placeholder tags: true, tokenSeparators: ['/',',',';'," "] }); }) 内致电datatable

renderDataTable