【问题标题】:How can I create a global search box across multiple DataTables via dataTableProxy in a shiny app?如何在闪亮的应用程序中通过 dataTableProxy 在多个 DataTables 中创建全局搜索框?
【发布时间】:2022-02-04 14:38:41
【问题描述】:

我在下面使用 Iris 数据集有这个可重现的代码。我想知道如何在当前表下方创建一个附加表,或者在更好的情况下如何创建一个选项卡集选项卡以包含一个附加表。

以下输出的代码和屏幕截图:

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))
    })
    
  })

【问题讨论】:

    标签: r shiny r-markdown dt


    【解决方案1】:

    我猜这是this的后续行动?

    这是一个简单的示例,其中包含 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)
    

    【讨论】:

    • 表未连接。 updateSearch 应用于每个表,分别在所有列中查找关键字 - 使用 columns 参数,您可以指定搜索列。
    • 我猜你是用 RStudio 开发的?然后是的,它托管在您的本地 PC 上。您可以与 here 描述的同一本地网络中的其他人共享它,或者将其部署在 shinyapps.io 上(需要免费帐户) - 这是一个网络应用程序,而不是独立的 html 文件。
    • updateSearch 的底层使用了一个 JS 函数。您也许可以使用相同的函数创建一些自定义 JS 代码并通过 htmlwidgets::onRender 将其附加到数据表小部件 - 但我担心这不会像 shiny 实现那样简单。
    • 好的,很高兴知道。我会采用闪亮的方法
    • 检查this answer
    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 2021-03-05
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多