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

时间:2018-07-17 11:39:20

标签: r shiny dt

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

#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()(从-到)设置将在数据表中显示的行范围。在此下方,我有第二对,我想用它来选择不同的范围并同时在表中显示它。例如,我可以从第一对中选择第二到第六行,并从第二对中选择第八到第十行。请注意,这两对不应以相同的值作为输入。例如,如果我在第一个范围中选择一个2到4的范围,那么将排除第二到第4行以在第二个范围中进行选择。

1 个答案:

答案 0 :(得分:1)

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

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