在 Shiny 中限制 DT 表中的行选择

Yor*_*nov 6 r shiny dt

我目前正在尝试将 Shiny 中的数据表中的选择限制为仅两行 - 我希望该表不允许用户单击多于行(但也能够在之后取消选择它们)。

library(DT)
shinyApp(
  ui = fluidPage(
    fluidRow(
      column(12,
             dataTableOutput('table')
      )
    )
  ),
  server = function(input, output) {
    output$table <- DT::renderDataTable(iris, 
                                    options = list(selection = "multiple")
    )
  }
)
Run Code Online (Sandbox Code Playgroud)

行选择当前处于多重模式,该模式有效,但我不希望选择超过两行。

Big*_*ist 5

更新:自 2022 年 4 月或更早版本起,似乎不再有效。

您可以通过 javascript 解决它,您可能已经看到过: Limit row Selection to 3 in datatables

或者你在 Shiny 中更新数据表:

library(DT)
library(shiny)
shinyApp(
  ui = fluidPage(
    fluidRow(
      column(12,dataTableOutput('tbl'))
    )
  ),
  server = function(input, output) {
    reset <- reactiveValues(sel = "")
    output$tbl <- DT::renderDataTable({
      input$tbl_rows_selected
      datatable(iris, selection = list(mode = 'multiple', selected = reset$sel))
    })
    
    observe({
      if(length(input$tbl_rows_selected) > 2){
        reset$sel <- setdiff(input$tbl_rows_selected, input$tbl_row_last_clicked)
      }else{
        reset$sel <- input$tbl_rows_selected
      }
    })
  }
)
Run Code Online (Sandbox Code Playgroud)

这个解决方案可能不太干净,但更容易理解。