在闪亮的应用程序中同时显示多个范围的数据表行

Display more than one ranges of datatable rows at the same time, in a shiny app

我有一个简单闪亮的应用程序。

#ui.r
navbarPage(
  "Application",
  tabPanel("General",
           sidebarLayout(

             sidebarPanel(
               uiOutput("book4"),
               uiOutput("book5"),
               uiOutput("book6"),
               uiOutput("book7")

             ),
             mainPanel(
               DT::dataTableOutput("hot5")

             )
           )))
#server.r
library(shiny)
library(DT)
library(tidyverse)
server <- function(input, output,session) {

  output$book4<-renderUI({
    numericInput("bk4", "From",
                 value = 1,
                 min=1,max=input$bk5)


  })
  output$book5<-renderUI({
    numericInput("bk5", "To",
                 value = 1,
                 min=1,max=10)


  })
  output$book6<-renderUI({
    numericInput("bk6", "From",
                 value = 1,
                 min=1,max=10)


  })
  output$book7<-renderUI({
    numericInput("bk7", "To",
                 value = 1,
                 min=1,max=10)


  })
  rt2<-reactive({
    DF=data.frame(
      Id= (input$bk4:input$bk5),
      Label=paste("Item",input$bk4:input$bk5),
      Pf=as.integer(rep.int(0,as.numeric(input$bk5-input$bk4+1))),
      stringsAsFactors = FALSE
    )
  })
  output$hot5 <-DT::renderDataTable(

    rt2()%>% 
      rowid_to_column("Row") %>% 
      mutate(Row = ""),
    rownames = FALSE,
    extensions = "Select",
    options = list(
      columnDefs = list(list(className = "select-checkbox", targets = 0, orderable = FALSE)),
      select = list(style = "multi", selector = "td:first-child")
    )

  )
}

如您所见,我使用一对 numericInput()(从-到)来设置将在数据中显示的行范围table。在这下面我有第二对,我想用它来选择不同的范围并同时在 table 中显示它。例如,我可以从第一对中选择第 2 到第 6 行,从第 2 对中选择第 8 到第 10 行。请注意,这两对不应将相同的值作为输入。例如,如果我在第一个范围内选择范围 2 到 4,那么第二个范围内的选择将排除第 2 到第 4 行。

为什么不像这样将它们组合成一个数据框:

rt2<-reactive({
    DF=data.frame(
      Id= unique(c(input$bk4:input$bk5,input$bk6:input$bk7)),
      Label=paste("Item",unique(c(input$bk4:input$bk5,input$bk6:input$bk7))),
      Pf=as.integer(rep.int(0,length(unique(c(input$bk4:input$bk5,input$bk6:input$bk7))))),
      stringsAsFactors = FALSE
    )
  })