如何在闪亮的应用程序中通过 dataTableProxy 创建跨多个数据表的全局搜索框?

How can I create a global search box across multiple DataTables via dataTableProxy in a shiny app?

我在下面使用 Iris 数据集获得了这个可重现的代码。我想知道如何在当前 table 下方创建一个额外的 table 或者在更好的情况下如何创建一个标签集选项卡以包含额外的 table.

下面的代码和输出截图:

library(shiny)
library(DT)    

shinyApp(
  ui = fluidPage(
    textInput('search2', "Search 2"),
    DTOutput('dt')
  ),
  server = function(input, output, session) {
    
    DTproxy <- dataTableProxy("dt")
    output$dt = renderDT(iris)
    
    observeEvent(input$search2, {
      updateSearch(DTproxy, keywords = list(global = input$search2, columns = NULL))
    })
    
  })

我想这是 this 上的 follow-up?

这是一个简单的示例,其中包含 3 个表格和 3 个选项卡,全部取决于全局搜索字段。我们可以通过 lapply 或模块减少代码,但我认为一开始这样更容易理解:

library(shiny)
library(DT)

ui <- fluidPage(
  titlePanel("Tabsets"),
  sidebarLayout(
    sidebarPanel(
      textInput('search', "Search"),
    ),
    mainPanel(
      tabsetPanel(id = "tabsetPanelID",
                  type = "tabs",
                  tabPanel("Tab1", DTOutput('DT1')),
                  tabPanel("Tab2", DTOutput('DT2')),
                  tabPanel("Tab3", DTOutput('DT3'))
      )
    )
  )
)

server <- function(input, output, session) {
  output$DT1 = renderDT(iris)
  DTProxy1 <- dataTableProxy("DT1")
  
  output$DT2 = renderDT(iris)
  DTProxy2 <- dataTableProxy("DT2")
  
  output$DT3 = renderDT(iris)
  DTProxy3 <- dataTableProxy("DT3")
  
  observeEvent(c(input$search, input$tabsetPanelID), {
    updateSearch(DTProxy1, keywords = list(global = input$search, columns = NULL))
    updateSearch(DTProxy2, keywords = list(global = input$search, columns = NULL))
    updateSearch(DTProxy3, keywords = list(global = input$search, columns = NULL))
  })
}

shinyApp(ui, server)