首页 > 解决方案 > 闪亮的数据表只保留选定的行..错误:未实现这些类型的比较

问题描述

我有一个数据表,我希望用户能够选择一行并且只显示选定的行,如果他们取消选择该行,那么它将再次显示所有行(原因是我想使用额外的房地产在过滤了其他图表后)......但我一直遇到错误。

大多数示例显示了如何使用事件和观察来显示选定的行或其值,但我找不到任何关于如何将行选择作为过滤器传回的信息。

library(shiny)
shinyApp(
  ui = fluidPage(
    column(8, dataTableOutput("table"))
  ),

  server = function(input, output) {
    df <- reactive({
      if       (length(input$table_rows_selected) > 0)
      iris%>%
        filter(Species == iris[input$table_rows_selected]) 
      else iris             
      })

    output$table <- DT::renderDataTable({
      df()})

  }
)

标签: reventsdatatableshinyreactive

解决方案


以下是如何仅显示选定行的示例。它通过创建第二个表来显示选定的行来工作。如果用户单击第二个表的唯一行,将显示完整的表。

library(shiny)
library(DT)

shinyApp(
  ui = fluidPage(
    column(8, uiOutput("tables_UI"))
  ),

  server = function(input, output) {

    v <- reactiveValues(row = 0)

    output$tables_UI  <- renderUI({
      if (v$row == 0) {
        DTOutput("table1")
      } else {
        DTOutput("table2")
      }
    })

    observeEvent(input$table1_rows_selected, {
      v$row <- input$table1_rows_selected
    })

    observeEvent(input$table2_rows_selected, {
      v$row <- 0
    })

    output$table1 <- DT::renderDataTable({
      iris})

    output$table2 <- DT::renderDataTable({
      if (v$row > 0) {
        iris[v$row, ]
      }
    })
  }
)

推荐阅读