【问题标题】:R shiny datatables don't show records (rows) at startR闪亮的数据表在开始时不显示记录(行)
【发布时间】:2020-01-24 05:54:00
【问题描述】:

我正在使用数据表构建一个闪亮的应用程序。 我想要的是启动时没有显示记录(行)。这样您就只能看到表格顶部的过滤器。当您开始键入时,将显示行。 我在数据表中找不到选项。这可能吗?

示例代码如下。

    shinyApp(

ui = navbarPage(
    title = 'DataTable',
    DT::dataTableOutput('ex2')
),

server = function(input, output, session) {

    output$ex2 <- DT::renderDataTable(
        DT::datatable(
            iris, 
              options = list(
                dom = 'Bfrtip',
                lengthMenu = list(c(5, 15, -1), c('5', '15', 'All'))
            )
        )
    )

}
)

【问题讨论】:

    标签: r shiny datatables


    【解决方案1】:

    可能不是最有效的方式,但我会使用虚拟data.frame 在启动时显示。当您选择过滤器(例如selectizeInput())时,会显示“真实”数据。

     output$ex2 <- renderDT({
    
       myFilter <- input$myFilter
    
       # assuming selectizeInput() is used
       if(is.null(myFilter)){
         irisDF <- data.frame(Sepal.Length = "",
                              Sepal.Length = "",
                              Petal.Length = "",
                              theREst = "")
       } else {
         irisDF <- iris
       }
    
       DT::datatable(irisDF, options = list(
               dom = 'Bfrtip',
               lengthMenu = list(c(5, 15, -1), c('5', '15', 'All')))
       )
    
    })
    

    【讨论】:

      【解决方案2】:

      您可以制作自己的搜索功能:

      编辑:添加了正在搜索的第二个 character 列。

      shinyApp(
      
        ui = navbarPage(
          title = 'DataTable',
          textInput('search', 'search'),
          DT::dataTableOutput('ex2')
        ),
      
      
        server = function(input, output, session) {
      
          require(dplyr)
          iris.mut <- iris %>% 
            mutate(bottom = paste0('v',sapply(Sepal.Width,function(x)paste0(rep('z',x*2),collapse="")),'bx'))
      
          dat <- reactive({
      
            if(input$search!=''){
              iris.mut %>%
                filter(grepl(input$search,Species)|grepl(input$search,bottom))
            } else {
              iris.mut %>%
                filter(Species == input$search)
            }
          })
      
          output$ex2 <- DT::renderDataTable(
            DT::datatable(
              dat(), 
              options = list(
                lengthMenu = list(c(5, 15, -1), c('5', '15', 'All'))
              )
            ))
      
        }
      )
      

      【讨论】:

      • 这很有用。但是,如何为多个列执行此操作。首先您搜索一列,然后您想在下一个搜索框中搜索第一个搜索操作的结果。这可能吗?
      • 我会修改代码,所以它会测试多个条件。您可以使用 or 运算符|filter() 函数中组合多个条件。
      • 谢谢!我不确定如何实现测试多个条件。所有变量都是字符串(所以不像 iris-sample 集)。我会试一试的。
      • 我把答案改成搜索两列
      猜你喜欢
      • 2014-05-13
      • 2016-12-14
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 2018-07-14
      • 2021-02-13
      相关资源
      最近更新 更多